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

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)
}
|