メインコンテンツまでスキップ

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

双方向性の例

送信と受信を組み合わせることで、ゴルーチン間でデータをやり取りできます。

package main

import "fmt"

func main() {
ch := make(chan string)

go func() {
ch <- "Hello, Channel!" // 送信
}()

msg := <-ch // 受信
fmt.Println(msg) // 出力: Hello, Channel!
}

まとめ

<- 演算子:

  • チャネルでデータを送信または受信するために使用される。