チャネルのバッファリング
デフォルトでは、Go言語のチャネルはバッファ無しで、つまり、送信された値を受け取るための対応する受信が準備できている場合にのみ、送信 (chan <-
) を受け付けます。一方、バッファ付きチャネルは、それらの値に対応する受信者がいなくても、制限された数の値を受け付けます。この実験では、バッファ付きチャネルを作成し、対応する同時受信なしでチャネルに値を送信するよう求められます。
- Go言語のチャネルの基本知識
- バッファ付きチャネルの理解
$ go run channel-buffering.go
buffered
channel
以下が完全なコードです:
// デフォルトでは、チャネルは _バッファ無し_ で、つまり、
// 送信された値を受け取るための対応する受信 (`<- chan`) が準備できている場合にのみ、
// 送信 (`chan <-`) を受け付けます。 _バッファ付きチャネル_ は、
// それらの値に対応する受信者がいなくても、制限された数の値を受け付けます。
package main
import "fmt"
func main() {
// ここでは、最大2つの値をバッファリングする文字列のチャネルを `make` します。
messages := make(chan string, 2)
// このチャネルはバッファ付きなので、対応する同時受信なしでこれらの値をチャネルに送信できます。
messages <- "buffered"
messages <- "channel"
// 後で、いつも通りこれら2つの値を受信できます。
fmt.Println(<-messages)
fmt.Println(<-messages)
}