知识卡片

通道关闭的惯例

专业/工作 · 485.b.1

内容

Go对”要不要关闭通道”给出了两条清晰的经验法则:第一,只有当接收方后续需要判断通道是否已关闭时(比如用for range遍历、或者用select、或者用v, ok := <-ch这种写法检测)才有必要显式关闭;如果接收方不关心这件事,通道不关闭也没关系,因为通道很轻量,不像文发散:这条惯例本质上是”谁拥有资源的生命周期,谁负责结束它”——发送方是数据流的源头,天然知道流何时结束,把关闭。

参考来源

- 位置:《Go语言程序设计》第7章《并发编程》(源文件:_epub-src/OEBPS/text00039.html) - 结论依据:原文在该章节围绕“Go对"要不要关闭通道"给出了两条清晰的经验法则:第一,只有当接收方后续需要判断通道是否已关闭时(比如用`fo…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:包的打印函数遇到 interface{} 类型时,它们会足够智能地打印实际类型的值。 5.2 分支 Go语言提供了3种分支语,即 if 、 switch 和 select, 后者将在后面深入讨论(参见5.4节)。分支效果也可以通过使用一个映射来达到,它的键可以用于选择分支,而它的值是对应的要调用的函数,我们会在本章末尾看到更多细节(参见5…