Go by Example: Channel Buffering

デフォルトでは、チャネルは バッファリングされない (unbuffered) ので、受信 (<- chan) の準備ができていないと送信 (chan <-) できません。 しかし、バッファリングされたチャネル (Buffered channels) は、対応する受信側がいなくても決められた量までなら 値を送信できます。

package main
import "fmt"
func main() {

この例では、string を 2 つまでバッファリングするチャネルを make しています。

    messages := make(chan string, 2)

このチャネルはバッファリングされるので、対応する受信側が いなくても値をチャネルに送信できます。

    messages <- "buffered"
    messages <- "channel"

そして、あとで通常通り 2 つの値を受信できます。

    fmt.Println(<-messages)
    fmt.Println(<-messages)
}
$ go run channel-buffering.go 
buffered
channel

Next example: Channel Synchronization.