Go 63

goroutine과 channel로 알아보는 비동기 처리

서문안녕하세요? 오늘은 go언어에서 channel과 goroutine에 대해 이야기해보려고 합니다.goroutine에 대하여goroutine은 가상 스레드로 처리를 시작하는 기능입니다. 작업자를 늘려서 일을 분담한다는 의미와 비슷합니다. 아래 코드와 같이 go 키워드를 사용하여 함수를 호출하면 goroutine으로 시작됩니다.func main() { go task()}func task() { // 어떤 작업} 여기서 goroutine으로 시작하고 싶은 함수 즉 task 함수에 반환값을 설정하고 싶은 경우가 있는데요. 그냥 쉽게 생각하면 다음과 같은 코드를 작성할 수 있습니다.func main() { // 문법 오류가 발생합니다 // 원래는 반환값을 지정할 수 없지만, 만약 가능하다고..

Go 2024.02.20

Go 언어의 포인터와 atomic.Value의 이해

** 목 차 **atomic.Value 소개Go 언어의 포인터와 interface{}atomic.Value의 구현Value 구조체 선언ifaceWords 구조체 선언값 읽기 (Load 함수)값 추가 (Store 함수)atomic 패키지의 사용과 안전한 구현Go 언어의 포인터에 대한 이야기를 atomic.Value의 구현을 통해 살펴보겠습니다. atomic.Value는 무엇일까요? 이것은 Go 1.4부터 추가된 기능입니다. Go의 공식 문서에서는 "메모리를 공유하여 통신하지 마라."라는 말이 자주 등장합니다. 그러나 여러 Goroutine에서 하나의 변수를 참조하거나 업데이트하는 것은 표준 패키지를 살펴보면 꽤 자주 나타나는 패턴입니다. 이때 sync 패키지 등을 사용하여 값의 race condition을..

Go 2024.02.14

Go 서버 모니터링 간단하게 만들기

Go 서버 모니터링Go로 서버 프로그램 작성하기Go에서는 서버 프로그램을 작성하기 위한 유틸리티가 풍부하게 준비되어 있으며, 고루틴이나 채널을 활용하면 고성능이 요구되는 환경에서도 충분한 성능을 발휘할 수 있습니다. 언제였는지 기억나지 않지만 '그것은 HTTP 서버를 작성하기 위한 언어입니다'라는 이야기를 어떤 엔지니어로부터 들었던 적이 있습니다. 예를 들어 'Hello, World!'만 반환하는 HTTP 서버라면 표준 라이브러리인 net/http를 사용하여 아래와 같이 작성할 수 있습니다. hello_server.gopackage mainimport ( "fmt" "net/http")func handler(w http.ResponseWriter, r *http.Request) ..

Go 2024.02.14