channel关闭不当或不关闭会引发很多问题,比如举1个很简单的例子:
两个生成者协程不断给dataCh写数据,main goroutine在持续消费dataCh的数据,这个场景假设每个生产者各生产指定数量数据后需要终止,而如果在第一个和第二个生产者中生产完时都close,或只在其中一个中close dataCh都是不行的,耳熟能详的一个报错:panic: send on closed channel ; 如果置close于不顾,则又会fatal error: all goroutines are asleep - deadlock! 。。。
且在消费者无法确定每读取完一个数据后是否达到了可关闭的状态时,在消费者协程中关闭dataCh也是不可取的。
关闭channel重点在于关闭的时机、关闭的位置是否恰当。以下基于长期实践和探索,总结出来,各位看官钟爱哪种方式则选用哪种。
先说说最简单的场景:单个ch的发送方是一个goroutine,则发送完毕后直接close即可,代码很简单不展示了;
(演示代码与思想均个人构造原创,欢迎大家阅读)
目录



