Go言語:Channelsのselect

select の話

  • selectステートメントで、複数のChannelsを条件分岐できる。
    • 受信、送信、どちらも可能。
    • Channelsの送信があるのに、受け取りを行ってなかったら、selectをしていない場合と同じで例外になるので注意。
    • 複数条件に一致する場合は、ランダムに選択される。
  • selectの中のいずれにも該当しない場合の条件をdefaultで指定可能。
    • Channelsに限定した話ではない。注意。

試してみた

Channelsのselect

実行結果

start? 1
0 0
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
11 89
12 144
13 233
14 377
15 610
16 987
17 1597
18 2584
19 4181
quit
0 0
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
11 89
12 144
13 233
14 377
15 610
16 987
17 1597
18 2584
19 4181
quit

コード中のコメントアウトしているdefault内の行を解くと、演算実行の間(繰り返されている間)に、何度もdefaultが呼び出されていることがわかる。