为了账号安全,请及时绑定邮箱和手机立即绑定

可以打开频道吗?

可以打开频道吗?

Go
暮色呼如 2021-05-07 09:14:38
如果我从未检查过Go通道的状态,可以永远保持打开状态(永远不关闭通道)可以吗?会导致内存泄漏吗?下列代码可以吗?func (requestCh chan<- Request) GetResponse(data RequestData) Response {    reply := make(chan Response)    requestCh <- Request{data: data, replyCh: reply}    return <-reply}
查看完整描述

3 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

永远保持Go频道永远不关闭是可以的。当不再使用该通道时,将对其进行垃圾回收。

请注意,只有当接收器正在寻找关闭通道时,才需要关闭通道。关闭通道是通道上的控制信号,指示没有更多数据跟随。

设计问题:通道关闭


查看完整回答
反对 回复 2021-05-10
?
当年话下

TA贡献1890条经验 获得超9个赞

是的,保持频道开放是可以的。正如Go编程语言书所述:

完成所有频道后,您无需关闭每个频道。仅在必须告知接收goroutines已发送所有数据的情况下,才需要关闭通道。垃圾回收器确定其无法访问的通道将收回其资源,无论该通道是否关闭。(不要将它与打开文件的关闭操作混淆。在完成每个文件后,对每个文件调用Close方法很重要 。)


查看完整回答
反对 回复 2021-05-10
?
长风秋雁

TA贡献1757条经验 获得超7个赞

使用Go通道的一个一般原则是,不要从接收方关闭通道,如果通道有多个并发发送者,也不要关闭通道。 ”

正如上面的答案中明确提到的,每个通道一旦标记为要清理就将最终被GC,因此可以不关闭通道而已,唯一的区别是该通道将gc在几个周期后可用没有明确关闭。

还下面的文章这个这个节目各种方式中的1例关闭通道:N,N:1或M:N(发件人:接收器)


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信