最近看到一段代码逻辑很奇怪:返回一个已关闭的 channel 给其他 goroutine 读取使用。这让我产生了一个疑问,很多文章说“从已关闭的 chan 读数据永远不会阻塞,一律返回空值”,为什么还会对channel进行关闭后返回?
代码如下:
实际测试后发现,“从已关闭的 chan 读数据永远不会阻塞,一律返回空值”这句话并不正确。下面的测试代码在关闭 channel 之后继续对 channel 读取,还是可以读取到缓冲区的结果。
结论是:从已关闭的 channel 接收数据,返回已缓冲数据或零值。
测试代码如下:
输出: