结论:
1. 遍历一个未关闭的channel会造成死循环
2. 即使关闭了一个非空通道,我们仍然可以从通道里面接收到未读取的数据
3. 可以这样理解,close()函数会往channel中压入一条特殊的通知消息,可以用来通知channel接收者不会再收到数据。所以即使channel中有数据也可以close()而不会导致接收者收不到残留的数据
4. channel不需要通过close释放资源,只要没有goroutine持有channel,相关资源会自动释放
实验如图(上面是未执行close()的,造成死锁;下面是执行了close()的,正常遍历结束):
代码如下: