可以打开频道吗?

如果我从未检查过Go通道的状态,可以永远保持打开状态(永远不关闭通道)可以吗?会导致内存泄漏吗?下列代码可以吗?


func (requestCh chan<- Request) GetResponse(data RequestData) Response {

    reply := make(chan Response)

    requestCh <- Request{data: data, replyCh: reply}

    return <-reply

}


暮色呼如
浏览 268回答 3
3回答

慕仙森

永远保持Go频道永远不关闭是可以的。当不再使用该通道时,将对其进行垃圾回收。请注意,只有当接收器正在寻找关闭通道时,才需要关闭通道。关闭通道是通道上的控制信号,指示没有更多数据跟随。设计问题:通道关闭

当年话下

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

长风秋雁

“使用Go通道的一个一般原则是,不要从接收方关闭通道,如果通道有多个并发发送者,也不要关闭通道。&nbsp;”正如上面的答案中明确提到的,每个通道一旦标记为要清理就将最终被GC,因此可以不关闭通道而已,唯一的区别是该通道将gc在几个周期后可用没有明确关闭。还下面的文章这个和这个节目各种方式中的1例关闭通道:N,N:1或M:N(发件人:接收器)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go