备注: Go 团队决定改进和修改现在版本的 netchan 包。这个包已经被移动到 old/netchan ,并且 old/ 层级的包中是保留的不被推荐的代码,它已经从 Go 1. 中从标准库中移除。本章节为了向后兼容,只讨论下 netchan 包的概念。

    译者注: 如果想使用这个包,需要科学上网后,在命令行执行: go get golang.org/x/exp/old/netchan 安装

    一个与 rpc 密切相关的在网络上使用 通道 的技术。在 14 章 中,通道作为一个本地通道被使用,它们只存在于执行它们的机器的内存空间中。netchan 包实现了类型安全的网络通道: 它允许通道的两端出现在通过网络连接的不同计算机上。一个出口按照名称发布 一个(组) 通道 。一个入口去连接出口的机器,并按照名称输入到 通道 。网络 通道 不是同步的,它们就像是缓冲 通道

    在发送机器上,代码就像这样:

    1. exp, err := netchan.NewExporter("tcp", "netchanserver.mydomain.com:1234")
    2. if err != nil {
    3. log.Fatalf("Error making Exporter: %v", err)
    4. }
    5. ch := make(chan myType)
    6. err := exp.Export("sendmyType", ch, netchan.Send)
    7. if err != nil {
    8. log.Fatalf("Send Error: %v", err)
    9. }

    接收方代码:

    1. imp, err := netchan.NewImporter("tcp", "netchanserver.mydomain.com:1234")
    2. if err != nil {
    3. log.Fatalf("Error making Importer: %v", err)
    4. }
    5. ch := make(chan myType)
    6. err = imp.Import("sendmyType", ch, netchan.Receive)
    7. if err != nil {
    8. log.Fatalf("Receive Error: %v", err)
    9. }