Go by Example: Channels

チャネル (Channels) は、並行実行されるゴルーチン間を 接続するパイプです。あるゴルーチンからチャネルを通して 値を送信し、別のゴルーチンでその値を受信できます。

package main
import "fmt"
func main() {

make(chan 値の型) で新しいチャネルを作成します。 チャネルは送受信する値で型付けされます。

    messages := make(chan string)

channel <- 構文で、チャネルへ値を 送信 します。 ここでは、新しいゴルーチンから messages チャネルへ "ping" という値を送信しています。

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

<-channel 構文で、チャネルから値を 受信 します。 ここでは、上で送信した "ping" メッセージを受信して 画面に表示しています。

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

このプログラムを実行すると、 "ping" メッセージが チャネルを通して一方のゴルーチンからもう一方へ 正しく渡されていることが分かります。

$ go run channels.go 
ping

デフォルトでは、送る側と受ける側が準備できるまで、 送受信はブロックされます。この性質により、何か特別な 同期処理を書かなくても、プログラムの最後で "ping" メッセージを受信するまで待つことができるのです。

Next example: Channel Buffering.