可以打开一个频道吗?

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

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

将Go频道永远打开并永不closures是可以的。 当频道不再使用时,将被垃圾收集。

请注意,只有在接收器正在寻找closures时才需要closures通道。 closures通道是通道上的控制信号,表示不再有数据。

devise问题:渠道closures

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

完成后,您无需closures每个通道。 只有在告知接收端goroutines所有数据已经​​发送的情况下,才需要closures一个通道。 垃圾收集器确定为无法访问的通道无论是否closures,其资源都将被回收。 (不要把它与打开文件的closures操作混淆在一起,在完成之后对每个文件调用Close方法是非常重要的。)

是的,可以开放渠道,事实上这是典型的。 正在打开的频道不构成对频道对象的引用,因此不会阻止它被垃圾收集。

去垃圾收集,所以你不必“自由”的任何东西。

有closures频道的可能性,但主要用作 – close(频道) – 告诉goroutine(或主程序)在该频道上不会发送任何内容。