go 21

Golang (Go언어) Go로 만드는 웹 (5)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. POST를 사용하여 테스트 진행하기- Go로 만드는 웹(4) 포스팅에서 사용했던 프로젝트 그대로 사용하여 POST 테스트 진행하기func TestCreateUser(t *testing.T) { assert := assert.New(t) ts := httptest.NewServer(NewHandler()) defer ts.Close() resp, err := http.Post(ts.URL+"/users", "application/json", strings.NewReader(`{"first_name":"Joy", "last_name":"Kim", "email": "joy@mail.com"}`)) assert.NoError(err) ass..

Language/Golang 2025.01.10

Golang (Go언어) Go로 만드는 웹 (4)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. RESTful API- REST(Reperesentational State Transfer)로 표현식으로 데이터를 전송한다는 의미가 됨(직역).- 로이 핑딩이 2000년에 소개한 웹 아키텍처 형식으로 REST 설계 원칙에 입각한 시스템을 RESTful API라고 부름.- REST는 여러 아키텍처 설계 방법을 합친 방식으로 자세한 건 구글에 검색해 학습 필요. ✓ 간단히 REST를 말하면 URL과 메서드로 데이터와 동작을 표현하는 방식임.예를 들어 웹 서버에서 데이터를 가져오는 URL이 아래와 같다고 가정- GET https://www.hello.com/getworldinfo.aspx?id=3   해당 URL가 하는 일이 무엇인지 이해..

Language/Golang 2025.01.09

Golang (Go언어) Go로 만드는 웹 (3)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 테스트 환경 구성- 기존에 사용했던 디렉터리에서 새로운 디렉터리를 만들고 새 파일을 만들어 아래와 같이 수정함.//main.gopackage mainimport ( "Users//Web/myapp" "net/http")func main() { http.ListenAndServe(":3000", myapp.NewHttpHandler())} //app.go (New File)package myappimport ( "encoding/json" "fmt" "net/http" "time")type User struct { FirstName string `json:"First_name"` LastName string `json:"L..

Language/Golang 2025.01.07

Golang (Go언어) Go로 만드는 웹 (2)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. HTTP 동작 원리웹 브라우저에 도메인(ex. https://www.google.com) 을 입력한 뒤  엔터를 누르면,웹 브라우저는 도메인 네임 시스템(DNS)에 해당 도메인에 해당하는 IP 주소를 요청함. 만약, IP주소의 목적지가 컴퓨터라면 포트 번호는 수신한 데이터를 놓을 컴퓨터 내 창구와 같음.IP주소는 컴퓨터 자체를, 포트번호는 해당 컴퓨터 내 데이터를 수신할 수 있는 창구를 의미함.* 컴퓨터 포트는 0 ~ 65535번 포트를 가지고 있음. 포트 없이 https://www.google.com 을 입력하면, 기본 포트 번호로 요청을 전송함.- http는 80, https는 443즉, https://www.google.com은..

Language/Golang 2025.01.03

Golang (Go언어) Go로 만드는 웹 (1)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다.  ✓ Visual Studio Code를 사용하였고, 기존에 사용하던 디렉터리가 아닌 새 디렉터리를 만듦. HTTP 웹 서버 만들기- Go 언어에서는 net/http 패키지를 사용하여 손쉽게 웹 서버를 만들 수 있음.package mainimport ( "fmt" "net/http")func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello World") }) http.ListenAndServe(":3000", nil)} - HandleFunc은 핸들러를 등록하고, 경로에 해당하는 요청이 들어왔을 때 어떤 것..

Language/Golang 2025.01.02

Golang (Go언어) 제네릭 프로그래밍(Generic Programming) 3/3

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 제네릭 타입- 타입을 파라미터를 이용해서 여러 타입에 동작하는 새로운 타입을 만들 수 있음.type Node[T any] struct { val T next *Node[T]} - Node 구조체는 타입 파라미터를 사용해서 val 필드 타입이 어떤 타입이든 가능하도록 정의함. package mainimport "fmt"type Node[T any] struct { val T next *Node[T]}func NewNode[T any](v T) *Node[T] { // T타입의 val 필드값을 갖는 객체 생성 return &Node[T]{val: v}}func (n *Node[T]) Push(v T) *Node[T] { // No..

Language/Golang 2025.01.01

Golang (Go언어) 제네릭 프로그래밍(Generic Programming) 2/3

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 인터페이스(Interface)와 타입 제한자 차이- 하나의 Interface가 있고, String() 메서드를 가지고 있으면 이는 string 타입들을 다 해당 Interface로 사용될 수 있음.tpye Stringer interface { String() string} - 타입 제한은, 동일하게 interface라고 사용하지만 틸드(~)를 사용하여 정의된 타입들 중 하나가 가능함.tpye Integer interface { ~int8 | ~int16 | ~int32 | int64 | ~int} → 같은 키워드인 인터페이스를 동일하게 사용하였지만, 둘 다 타입을 제한하는 목적으로 사용한다고 볼 수 있음.- 인터페이스는 해당 조건에 ..

Language/Golang 2025.01.01

Golang (Go언어) 제네릭 프로그래밍(Generic Programming) 1/3

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 제네릭 프로그래밍(Generic Programming)- Go 1.18 버전에 추가된 기능으로 타입 파라미터를 통해 하나의 함수나 타입이 여러 타입에 대응해 동작하도록 하는 기법- 자바, C#, C++ 같은 언어에서는 이미 제공되던 기능임. package mainimport "fmt"func min(a, b int) int { if a  → a,b는 출력이 가능하나 c,d는 아래 결과로 보면 int16 타입을 int로 변환할 수 없어서 사용할 수 없다고 나옴.- min은 int 타입인데, c,d는 int16 타입으로 서로 타입이 다르며, Go는 이를 변환시켜주지 않음(최강 타입 언어).   = 변환하고 싶다면 Println부분에서 i..

Language/Golang 2024.12.27

Golang (Go언어) 채널과 컨텍스트(Channel & Context)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 채널(Channel)- 고루틴끼리 메시지를 전달할 수 있는 메시지 큐(FIFO).- Thread Safe Queue라고도 하며, 멀티스레드 환경에서 Lcok 없이 사용할 수 있음.- 메시지 큐에 메시지들은 차례대로 쌓이게 되고 메시지를 읽을 때 맨 처음 온 메시지부터 차례대로 읽게됨. * 채널 인스턴스 생성- 채널을 사용하기 위해서는 먼저 채널 인스턴스를 만들어야 함.var message chan string = make(chan string) - 슬라이스, 맵 등과 같이 make() 함수로 만들 수 있고, 채널 타입은 채널(Channel)을 의미하는 Chan과 메시지 타입을 합쳐서 표현- chan string은 string 타입 메..

Language/Golang 2024.12.11

Golang (Go언어) Go루틴

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 스레드(Thread)- 프로세스 안의 세부 작업 단위- 프로세스는 스레드를 한 개 이상 가지고 있음.- 스레드가 하나면 싱글 스레드 프로세스, 여럿이면 멀티 스레드 프로세스라고 함. → 초기 컴퓨터에서 사용한 천공카드 다발을 스레드라고 부를 수 있고, 명령어가 적힌 종이 다발을 CPU가 한 줄씩 읽어서 수행하는게 컴퓨터     CPU 코어는 한 번에 하나의 명령어 다발 = 스레드를 수행할 수 있음.- 원래 CPU 코어는 한 번에 한 명령어 밖에 수행할 수 없음- 스레드가 CPU 코어를 빠르게 교대로 점유하면 동시에 모든 스레드가 실행되는 것 처럼 보임. * 컨텍스트 스위칭(Context Switching) 비용- CPU 코어가 여러 ..

Language/Golang 2024.12.07