我正在使用Go频道,我想知道关闭频道和设置为零有什么区别?

Edit:

在此example中,我想通过以下方式断开发送方和接收方的连接,无论是关闭信道还是将其设置为零.这样做的最佳实践是什么?

推荐答案

将通道变量设置为nil只需将该变量设置为nil,同时使它之前提到的通道保持初始化状态.

这与将任何其他变量设置为零是一样的.

如果有对该频道的其他引用,您仍然可以访问它.如果没有,它将被垃圾收集.

此外,nil通道与闭合通道在写入或读取时的行为也不同.摘自戴夫·切尼(Dave Cheney)的博客帖子"Channel Axioms"(Channel Axioms),我推荐全文阅读:

  • 发送到零通道将永远阻塞
  • 来自零信道的接收将永远阻塞
  • 发送到关闭通道的人惊慌失措
  • 来自封闭通道的接收立即返回零值

Go相关问答推荐

如何在使用中介资源时处理函数中的`defer`

编辑时保留YAML文件中的单引号

如何将GoFr筛选器用于查询参数?

使用!NOT运算符的Golang文本/模板多个条件

如何在链接中写入链接

如何为循环扫描的bufio scanner 设置超时?

在golang二进制中嵌入SvelteKit

如何从Go项目连接Microsoft Access数据库?

同一文件上的多个 Arrow CSV 阅读器返回 null

如何判断范围内的字段?

使用模拟在 golang 中测试我的界面.专门测试调用同级函数的 1 个函数

从Go中的随机日期开始以天为单位获取时间

AddE 上的 Apache Tinkerpop gremlin-go 驱动程序 Next() 返回E0903:没有剩余结果

确保 Go 1.20 编译时的严格可比性?

GRPC 元数据未在 Go 中更新

如何排除溢出矩阵的坐标

正确编码 JWT

我应该明确地创建一个与Belongs To或Has Many对称的关系吗?

Gin中测试模式有什么用

如何访问 Go 模板中数组的第一个索引的值