← Go コース
50. select — 複数のチャネルを同時に待つ
select はいくつかのチャネル操作を並べて、準備ができたものを1つ選んで実行する文です。switch に似た見た目ですが、各 case はチャネルの送信または受信です。複数の case が同時に準備できた場合は、その中からランダムに1つ選ばれます。
どの case も準備できていないときは、準備ができるまでブロックします。default を書いておくと、準備済みの case がない場合に即座に default が実行されます(ノンブロッキング)。タイムアウトには time.After から返る受信用チャネルを case に並べるのが定番です。
下の例では2つのチャネルから合計2回受信するまで select を回します。受信した値の合計は順序に依存せず一定なので、出力は毎回同じです。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Go