소개
이 랩은 Golang 의 버퍼 채널 (buffered channels) 에 대한 이해도를 테스트하는 것을 목표로 합니다.
채널 버퍼링 (Channel Buffering)
기본적으로 Golang 의 채널은 언버퍼 (unbuffered) 됩니다. 즉, 전송된 값을 수신할 준비가 된 해당 수신자가 있는 경우에만 전송 (chan <-) 을 허용합니다. 그러나 버퍼 채널 (buffered channels) 은 해당 값에 대한 해당 수신자 없이 제한된 수의 값을 허용합니다. 이 랩에서는 버퍼 채널을 생성하고 동시 수신 없이 채널에 값을 전송해야 합니다.
- Golang 채널에 대한 기본적인 지식
- 버퍼 채널에 대한 이해
$ go run channel-buffering.go
buffered
channel
전체 코드는 다음과 같습니다.
// 기본적으로 채널은 _unbuffered_입니다. 즉,
// 전송된 값을 수신할 준비가 된
// 해당 수신자 (`<- chan`) 가 있는 경우에만 전송 (`chan <-`) 을 허용합니다.
// _Buffered channels_는 해당 값에 대한 해당 수신자 없이
// 제한된 수의 값을 허용합니다.
package main
import "fmt"
func main() {
// 여기에서 최대 2 개의 값을 버퍼링하는 문자열 채널을 `make` 합니다.
messages := make(chan string, 2)
// 이 채널은 버퍼링되므로
// 해당 동시 수신 없이 이 값들을 채널로 보낼 수 있습니다.
messages <- "buffered"
messages <- "channel"
// 나중에 이 두 값을 평소처럼 수신할 수 있습니다.
fmt.Println(<-messages)
fmt.Println(<-messages)
}
요약
이 랩에서는 Golang 에서 버퍼 채널을 생성하고 해당 동시 수신 없이 채널에 값을 전송하는 방법을 배웠습니다. 이는 송신자를 차단하지 않고 채널에 값을 보내려는 시나리오에서 유용합니다.