返回介绍

10.4 重温 Channel(通道)

发布于 2024-08-14 12:50:32 字数 2615 浏览 0 评论 0 收藏 0

一旦掌握了 select 关键字,Go channels 可以以几种独特的方式做更多事要比您在第9章(并发-Goroutines,Channel和Pipeline)学到的。这节将揭晓 Go channels 的这些使用方法。

要记住 channel 类型的零值是 nil,并且如果您发送一个消息给以关闭的 channel,程序将崩溃。然而,如果您尝试从已关闭的 channel 读取的话,会得到 channel 类型的零值。因此,关闭 channel 后,您不能再往里写,但您能一直读。

为了能关闭 channel, channel 不必是只接受。另外,一个 nil channel 总是阻塞的。channels 的这个特性非常有用,当您想要禁用 select 表达式的一个分支时,可以分配一个 nil 值给一个 channel 变量。

最后,如果您要关闭一个 nil channel,程序就会崩溃。最好的说明是下面这个 closeNilChannel.go 程序:

package main

func main() {
    var c chan string
    close(c)
}

执行 closeNilChannel.go 产生如下输出:

$go run closeNilChannel.go
panic: close of nil channel

goroutine 1 [running]:
main.main()
    /Users/mtsouk/closeNilChannel.go:5 +0x2a
exit status 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文