看范例学 Golang (二十六)- Channel 的方向

Channel 的方向

当使用 channel 作为参数的时候,我们可以通过标记 channel 的方向来使之只发送或者接收数值,进而提高程序的健壮性。

package main
import "fmt"

这个 ping 函数只能用来往 channel 中发送信息。如果试图使用它来接收信息,那么将会产生一个运行时错误。

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

这个 pong 函数接收的第一个 channel 只用接收值
(pings) 第二个发送 (pongs) 。

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