写在前面
面试或者工作中经常会遇到go channel读写和关闭问题,今天就来汇总一下
正文
channel种类 | 读 | 写 | 关闭 |
---|---|---|---|
未初始化的channel | 死锁 | 死锁 | painc |
已初始化但未关闭的channel | 正常 | 正常 | 正常 |
已初始化但已关闭的channel | 正常 | panic | painc |
注意
- 正常说的是允许,如果channel大小不够或者已满,也会造成阻塞,但这是正常情况。
- 死锁一般值的是这个地方用于得不到满足,一般在程序编译的时候会报死锁错误,编译失败。但是在select语句中不会阻塞,因为select可以执行其他的case。当然如果没有其他的case可执行也会报死锁。
参考
[1]从一个未初始化的chan和一个已关闭的chan中读取数据会发生什么