- チャネルの作成とデータの送受信
チャネルの作成には、組み込みのmake関数を使用します。例えば、整数型のデータを送受信するためのチャネルを作成するには、以下のようにします。
ch := make(chan int)
チャネルを介してデータを送信するには、<-
演算子を使用します。
ch <- 10 // データを送信する
チャネルからデータを受信するには、以下のようにします。
data := <-ch // データを受信する
- チャネルのバッファリング
チャネルは、デフォルトではバッファリングされていないため、送信と受信が同時に行われると、送信側と受信側がブロックされます。しかし、バッファリングを使用することで、一定量のデータを送受信する際にブロックを回避することができます。
ch := make(chan int, 3) // バッファサイズが3のチャネルを作成
ch <- 1
ch <- 2
ch <- 3 // バッファがいっぱいになるまでブロックされずにデータを送信できる
data := <-ch // データを受信する
- チャネルのクローズと範囲節
送信側がデータの送信を終了する場合、チャネルをクローズすることができます。受信側は、クローズされたチャネルからの値を受信し続けることができますが、クローズ後にはデータがない場合はゼロ値が返されます。
close(ch) // チャネルをクローズする
for data := range ch {
// dataを処理する
}
- チャネルの選択
複数のチャネルからのデータを効率的に受信するために、select
文を使用することができます。select
文は、複数のチャネルの操作を監視し、最初に準備ができたものを選択します。
select {
case data := <-ch1:
// ch1からデータを受信する
case data := <-ch2:
// ch2からデータを受信する
default:
// どのチャネルも準備ができていない場合の処理
}
以上が、Go言語のチャネルを活用した並行処理と通信の基本的な方法です。これらの機能を使うことで、効率的で安全な並行処理を実現することができます。