Go言語のチャネルの送信と受信のための <-
演算子
<-
演算子は、Go言語におけるチャネル (channel) を操作するための専用演算子で、次のような2つの役割があります。
送信 (Send)
チャネルにデータを送信する場合、左辺にチャネル、右辺に送信する値を指定します。
ch <- value
- 意味:
ch
というチャネルにvalue
を送信する。 - 動作:
- 無バッファチャネルの場合 (unbuffered channel): 受信側が値を受け取るまで送信側はブロックされる。
- バッファ付きチャネルの場合 (buffered channel): バッファが満杯でない限り、送信側はすぐに処理を進める。
例:
ch := make(chan int)
go func() {
ch <- 42 // 受信側が準備できるまでブロックされる
}()
fmt.Println(<-ch) // チャネルから値を受信
受信 (Receive)
チャネルからデータを受け取る場合、<-
をチャネルの左に置きます。
value := <-ch
- 意味:
ch
というチャネルから値を受信し、それをvalue
に代入する。 - 動作:
- チャネルに値が格納されていない場合、送信されるまで受信側はブロックされる。
例:
ch := make(chan int)
go func() {
ch <- 42 // チャネルに値を送信
}()
value := <-ch // チャネルから値を受信
fmt.Println(value) // 出力: 42