サンプルで学ぶ Go: チャネル

チャネルは同時実行の goroutine を接続するパイプです。1 つの goroutine からチャネルに値を送信でき、別の goroutine でその値を受信できます。

package main
import "fmt"
func main() {

make(chan val-type) を使用して新しいチャネルを作成します。チャネルは、自身が伝達する値によって型付けされます。

    messages := make(chan string)

channel <- 構文を使用してチャネルに値を送信します。ここでは、新しく作成した goroutine から "ping" を上で作成した messages チャネルに送信します。

    go func() { messages <- "ping" }()

<-channel 構文はチャネルから値を受信します。ここでは上で送信した "ping" メッセージを受信して出力します。

    msg := <-messages
    fmt.Println(msg)
}

プログラムを実行すると、"ping" メッセージはチャネルを介して 1 つの goroutine から別の goroutine に正常に渡されます。

$ go run channels.go 
ping

既定では、送信と受信は送信者と受信者の両方が準備完了するまでブロックされます。このプロパティにより、他の同期を使用しなくても、プログラムの最後に "ping" メッセージを待機できます。

次の例: チャネルのバッファリング