Go言語のチャネルを活用した並行処理と通信


  1. チャネルの作成とデータの送受信

チャネルの作成には、組み込みのmake関数を使用します。例えば、整数型のデータを送受信するためのチャネルを作成するには、以下のようにします。

ch := make(chan int)

チャネルを介してデータを送信するには、<-演算子を使用します。

ch <- 10 // データを送信する

チャネルからデータを受信するには、以下のようにします。

data := <-ch // データを受信する
  1. チャネルのバッファリング

チャネルは、デフォルトではバッファリングされていないため、送信と受信が同時に行われると、送信側と受信側がブロックされます。しかし、バッファリングを使用することで、一定量のデータを送受信する際にブロックを回避することができます。

ch := make(chan int, 3) // バッファサイズが3のチャネルを作成
ch <- 1
ch <- 2
ch <- 3 // バッファがいっぱいになるまでブロックされずにデータを送信できる
data := <-ch // データを受信する
  1. チャネルのクローズと範囲節

送信側がデータの送信を終了する場合、チャネルをクローズすることができます。受信側は、クローズされたチャネルからの値を受信し続けることができますが、クローズ後にはデータがない場合はゼロ値が返されます。

close(ch) // チャネルをクローズする
for data := range ch {
    // dataを処理する
}
  1. チャネルの選択

複数のチャネルからのデータを効率的に受信するために、select文を使用することができます。select文は、複数のチャネルの操作を監視し、最初に準備ができたものを選択します。

select {
case data := <-ch1:
    // ch1からデータを受信する
case data := <-ch2:
    // ch2からデータを受信する
default:
    // どのチャネルも準備ができていない場合の処理
}

以上が、Go言語のチャネルを活用した並行処理と通信の基本的な方法です。これらの機能を使うことで、効率的で安全な並行処理を実現することができます。