golang
-
golang: 컨텍스트(Context)란?Back-End/Golang 2024. 3. 30. 12:13
Go 언어에서 context 패키지는 고루틴 간에 데이터, 취소 신호, 타임아웃 등을 전파하는 데 사용됩니다. context.Context 인터페이스는 요청 처리에 필요한 모든 정보를 담고, 고루틴의 실행 제어를 가능하게 합니다. 이는 주로 API 호출, 데이터베이스 요청 등의 작업을 취소하거나, 작업의 마감 시간(deadlines)을 설정하고, 요청 스코프의 값(value)을 전달하는 데 유용합니다. Context의 주요 사용 사례: 요청 취소: 사용자 요청 취소나 타임아웃 시, 모든 관련된 작업을 중단시킵니다. 타임아웃 설정: 특정 작업에 대한 최대 실행 시간을 지정합니다. 값 전달: 요청 스코프에 있는 데이터를 여러 고루틴 사이에서 전달합니다. Context 사용 예제: 아래 예제에서는 contex..
-
golang: 채널(Channel)이란?Back-End/Golang 2024. 3. 30. 12:10
채널(Channel)은 Go 언어의 핵심 기능 중 하나로, 고루틴 간에 데이터를 안전하게 주고받을 수 있는 통신 메커니즘입니다. 채널을 사용하면 고루틴 사이에서 동기화 없이 데이터를 전달할 수 있으며, 이는 동시성 프로그래밍에서 발생할 수 있는 복잡한 문제들을 효과적으로 해결할 수 있게 해줍니다. 채널의 특징: 타입 안전성: 채널은 특정 타입의 데이터만을 전송할 수 있으며, 이는 프로그램의 안정성을 높여줍니다. 동기화: 채널을 통해 데이터를 보내거나 받을 때, Go 런타임은 이 과정이 안전하게 이루어지도록 자동으로 동기화를 관리합니다. 블로킹과 넌블로킹 동작: 채널은 기본적으로 블로킹(Blocking) 동작을 합니다. 데이터를 보내거나 받을 준비가 되지 않았을 경우, 해당 고루틴은 대기 상태에 머물게 됩..
-
golang: 고루틴(Goroutines)이란?Back-End/Golang 2024. 3. 30. 12:02
고루틴(Goroutines)은 Go 언어에서 동시성(concurrency)을 구현하는 핵심적인 부분입니다. 간단히 말하자면, 고루틴은 Go에서 실행되는 경량 스레드(lightweight threads)와 유사합니다. 하지만 전통적인 스레드에 비해 훨씬 적은 메모리를 사용하며, 쉽게 수천 개 이상을 생성하고 관리할 수 있습니다. 고루틴은 Go 런타임에 의해 관리되며, 고루틴 사이의 통신은 주로 채널(Channels)을 통해 이루어집니다. 고루틴의 특징: 경량: 고루틴은 매우 작은 메모리 스택을 사용하여 시작되며, 필요에 따라 동적으로 확장됩니다. 비동기 실행: 고루틴은 비동기적으로 실행됩니다. 즉, 메인 프로그램의 실행을 차단하지 않고 동시에 실행될 수 있습니다. 쉬운 생성: go 키워드를 사용하여 함수 ..