コード例: チャネルの方向

関数の引数としてチャネルを使用する場合、チャネルが値を送信するためだけか受信するためだけのどちらかを指定できます。この指定によって、プログラムの型安全性が高くなります。

package main
import "fmt"

この「ping」関数は、値を送信するためのチャネルのみを受け付けます。このチャネルから受信しようとすると、コンパイル時エラーになります。

func ping(pings chan<- string, msg string) {
    pings <- msg
}

「pong」関数は、受信用のチャネル(「pings」)と送信用のチャネル(「pongs」)の 2 つを受け付けます。

func pong(pings <-chan string, pongs chan<- string) {
    msg := <-pings
    pongs <- msg
}
func main() {
    pings := make(chan string, 1)
    pongs := make(chan string, 1)
    ping(pings, "passed message")
    pong(pings, pongs)
    fmt.Println(<-pongs)
}
$ go run channel-directions.go
passed message

次の例: 選択