如果我从不检查其状态,是否可以永久打开Go通道(从不关闭通道)?它会导致内存泄漏吗?以下代码可以吗?
func (requestCh chan<- Request) GetResponse(data RequestData) Response {
reply := make(chan Response)
requestCh <- Request{data: data, replyCh: reply}
return <-reply
}
将Go频道永远打开并永不关闭它是可以的。当不再使用该频道时,它将被垃圾收集。
请注意,如果接收器正在寻找关闭,则只需要关闭通道。关闭通道是通道上的控制信号,表示不再有数据。
是的,可以保持频道开放。正如the go programming language书所述:
完成后,您无需关闭每个频道。只有在告知接收goroutine所有数据都已发送时,才需要关闭通道。垃圾收集器确定无法访问的通道将回收其资源,无论它是否已关闭。 (不要将此与打开文件的关闭操作混淆。完成后对每个文件调用Close方法很重要。)
是的,将通道打开是可以的,事实上这是典型的。正在打开的通道不构成对通道对象的引用,因此不会使其不被垃圾收集。
Go是垃圾收集,所以你不必“免费”任何东西。
有可能关闭频道,但它主要用作 - 关闭(频道) - 告诉goroutine(或主程序)在该频道上不会发送任何其他内容。