Dev Study
Go コース

50. select — 複数のチャネルを同時に待つ

select はいくつかのチャネル操作を並べて、準備ができたものを1つ選んで実行する文です。switch に似た見た目ですが、各 case はチャネルの送信または受信です。複数の case が同時に準備できた場合は、その中からランダムに1つ選ばれます。

どの case も準備できていないときは、準備ができるまでブロックします。default を書いておくと、準備済みの case がない場合に即座に default が実行されます(ノンブロッキング)。タイムアウトには time.After から返る受信用チャネルを case に並べるのが定番です。

下の例では2つのチャネルから合計2回受信するまで select を回します。受信した値の合計は順序に依存せず一定なので、出力は毎回同じです。

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

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