备注: Go 团队决定改进和修改现在版本的 netchan
包。这个包已经被移动到 old/netchan ,并且 old/
层级的包中是保留的不被推荐的代码,它已经从 Go 1. 中从标准库中移除。本章节为了向后兼容,只讨论下 netchan
包的概念。
译者注: 如果想使用这个包,需要科学上网后,在命令行执行:
go get golang.org/x/exp/old/netchan
安装
一个与 rpc
密切相关的在网络上使用 通道
的技术。在 14 章 中,通道作为一个本地通道被使用,它们只存在于执行它们的机器的内存空间中。netchan
包实现了类型安全的网络通道: 它允许通道的两端出现在通过网络连接的不同计算机上。一个出口按照名称发布 一个(组) 通道
。一个入口去连接出口的机器,并按照名称输入到 通道
。网络 通道
不是同步的,它们就像是缓冲 通道
在发送机器上,代码就像这样:
exp, err := netchan.NewExporter("tcp", "netchanserver.mydomain.com:1234")
if err != nil {
log.Fatalf("Error making Exporter: %v", err)
}
ch := make(chan myType)
err := exp.Export("sendmyType", ch, netchan.Send)
if err != nil {
log.Fatalf("Send Error: %v", err)
}
接收方代码:
imp, err := netchan.NewImporter("tcp", "netchanserver.mydomain.com:1234")
if err != nil {
log.Fatalf("Error making Importer: %v", err)
}
ch := make(chan myType)
err = imp.Import("sendmyType", ch, netchan.Receive)
if err != nil {
log.Fatalf("Receive Error: %v", err)
}