通道类型的“未初始化”字段或变量的所有通道类型的零值为
nil。因此,让我们研究一下
nil通道或通道上的操作。
值得 在一篇文章中收集 渠道公理 :
nil
通道上的发送将永远阻塞(规范:Send语句)- 来自
nil
通道的接收将永远阻塞(规范:接收运算符) - 发送到封闭通道恐慌(规范:Send语句)
- 来自封闭通道的接收立即返回零值(规范:接收运算符)
nil通道阻塞的原因:如果一个通道值为
nil,则没有人引用它,因此没有人会准备好从中接收(我们要发送的内容);或发送任何内容(我们会从中收到什么)。
您可以在Dave Cheney:Channel Axioms中阅读更多的推理和更多详细信息。
为了完整性:
- 关闭一个
nil
频道将会引起一个运行时恐慌(就像闭一个已经封闭的通道)。 - 长度和容量一个的
nil
信道是0
; 根据nil
具有0
长度和容量的切片和地图。
理由:“关闭”是一种状态,但是一个
nil通道不能具有状态(只有一个
nil通道,“关闭”通道没有一个通道,“非关闭”通道没有一个通道)。而且没有元素在
nil通道中排队(因此len
= 0),并且它没有缓冲区容量(因此cap = 0)。



