- 複数のチャネル操作を待ち受け、準備ができたものを1つ実行する構文
switchのチャネル版のイメージ
- 挙動
- 実行可能な
caseが1つだけ → それを実行 - 複数ある → ランダムに1つ選ばれる(偏りを防ぐため)
- 1つもない →
defaultがあればそれを実行、なければブロックして待つ
- 実行可能な
select {
case v := <-ch1:
// ch1 から受信できたとき
fmt.Println(v)
case ch2 <- x:
// ch2 へ送信できたとき
case <-time.After(time.Second):
// 1秒間どのcaseも準備できなかったとき(タイムアウト)
default:
// どのcaseもすぐ実行できないとき(非ブロッキング)
}