← Go コース
46. チャネル — goroutine 間で値をやりとりする
チャネル(channel)は goroutine 同士が値を安全に送受信するための通り道です。make(chan 型) で作り、ch <- v で値を送信し、v := <-ch で受信します。矢印はデータが流れる向きを表すと覚えると分かりやすいです。
バッファのない(デフォルトの)チャネルは、送信側と受信側がそろうまで互いに待ち合わせます。つまりチャネルへの送信は、誰かが受信するまでブロックします。この同期の性質のおかげで、WaitGroup を使わなくても受信が完了を保証してくれます。
下の例では goroutine が計算結果をチャネルに送り、main がそれを受信します。受信が完了を待つので、main が先に終わってしまうことはなく、毎回同じ結果が出ます。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Go