可以打开频道吗?

新手上路,请多包涵

如果我从不检查其状态,是否可以让 Go 通道永远打开(永远不要关闭通道)?会不会导致内存泄漏?下面的代码可以吗?

 func (requestCh chan<- Request) GetResponse(data RequestData) Response {
    reply := make(chan Response)
    requestCh <- Request{data: data, replyCh: reply}
    return <-reply
}

原文由 Kluyg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

可以让 Go 通道永远打开并且永远不要关闭它。当通道不再被使用时,它将被垃圾收集。

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

设计问题:通道关闭

原文由 peterSO 发布,翻译遵循 CC BY-SA 3.0 许可协议

是的,保持频道畅通是可以的。正如 go 编程语言 书所述:

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

原文由 cizixs 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题