【发布时间】:2017-09-22 19:23:41
【问题描述】:
【问题讨论】:
-
通道值与任何其他值一样。如果没有对它的引用,它将被垃圾收集。相关/有用了解:How does a non initialized channel behave?
【问题讨论】:
将通道变量设置为 nil 只是将变量设置为 nil,同时保持之前初始化的通道。
这与将任何其他变量设置为 nil 相同。
如果有其他对该频道的引用,您仍然可以访问它。如果没有,它将被垃圾收集。
此外,nil 与封闭通道在写入或读取时的行为不同。来自 Dave Cheney 的博文Channel Axioms,我建议您完整阅读:
- 发送到 nil 通道会永远阻塞
- 来自 nil 通道的接收永远阻塞
- 发送到关闭的通道发生恐慌
- 来自关闭通道的接收立即返回零值
【讨论】:
它在语言规范中。 您可以永远从关闭的通道接收,但在关闭的通道上写入会导致运行时恐慌。 在 nil 通道上的两个操作都会永远阻塞。 这种行为常用于同步方案中。
【讨论】: