チャネル (Channels) は、並行実行されるゴルーチン間を 接続するパイプです。あるゴルーチンからチャネルを通して 値を送信し、別のゴルーチンでその値を受信できます。
package main
import "fmt"
func main() {
make(chan 値の型) で新しいチャネルを作成します。 チャネルは送受信する値で型付けされます。
make(chan 値の型)
messages := make(chan string)
channel <- 構文で、チャネルへ値を 送信 します。 ここでは、新しいゴルーチンから messages チャネルへ "ping" という値を送信しています。
channel <-
messages
"ping"
go func() { messages <- "ping" }()
<-channel 構文で、チャネルから値を 受信 します。 ここでは、上で送信した "ping" メッセージを受信して 画面に表示しています。
<-channel
msg := <-messages fmt.Println(msg) }
このプログラムを実行すると、 "ping" メッセージが チャネルを通して一方のゴルーチンからもう一方へ 正しく渡されていることが分かります。
$ go run channels.go ping
デフォルトでは、送る側と受ける側が準備できるまで、 送受信はブロックされます。この性質により、何か特別な 同期処理を書かなくても、プログラムの最後で "ping" メッセージを受信するまで待つことができるのです。
Next example: Channel Buffering.
by Mark McGranaghan and Eli Bendersky (translated by @oohira) | feedback | license