Dev Study
Go コース

47. バッファ付きチャネル — 容量を持つチャネル

make(chan int, 3) のように第2引数で容量を指定すると、バッファ付きチャネルになります。バッファに空きがある間は、受信側がいなくても送信がブロックせずに進みます。バッファが満杯になると、空きができるまで送信側がブロックします。

受信側はバッファに値がある限りブロックせずに取り出せ、空になると次の送信を待ちます。一時的に送受信のペースがずれても吸収できるので、生産者と消費者の速度差をならす用途に向きます。

下の例では容量2のチャネルに2つ送ってから、順に受信します。送受信が1つの goroutine で完結しデッドロックしない形なので、結果は安定して出力されます。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗