当使用通道作为函数参数时,可以指定通道是用于发送值还是接收值。这种明确性提高了程序的类型安全性。
package main
import "fmt"
此 ping 函数仅接受用于发送值的通道。尝试在此通道上接收将导致编译时错误。
ping
func ping(pings chan<- string, msg string) { pings <- msg }
pong 函数接受一个用于接收 (pings) 的通道和一个用于发送 (pongs) 的通道。
pong
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
下一个示例:Select.
作者:Mark McGranaghan 和 Eli Bendersky | 源代码 | 许可证