为什么不能defer close(channel)?
来源:11-5 传统同步机制

慕移动8402275
2021-05-06
文件可以defer close
lock也可以defer close
为什么channel不行?
写回答
1回答
-
ccmouse
2021-05-07
也是可以的,但的确比较少这样,其实是看我们这个channel的生命周期。
首先channel不一定需要close,close只是一个特殊的信号,发送方可以通过close告诉接收方,说我保证没有新的数据要发送了。如果不是这样的应用场景,就不需要close。
然后channel的生命周期一般比较长,我很可能在函数里面创建了channel,并且传递给别人使用。用了defer就会导致刚创建完就被close,比如下面:
func createDataSource() chan int {
ch := make(chan int)
// defer close(ch) // 这里如果close了,别人就没法用这个channel了
return ch
}
10
相似问题