go channel读写和关闭问题


写在前面

面试或者工作中经常会遇到go channel读写和关闭问题,今天就来汇总一下

正文

channel种类 关闭
未初始化的channel 死锁 死锁 painc
已初始化但未关闭的channel 正常 正常 正常
已初始化但已关闭的channel 正常 panic painc

注意

  • 正常说的是允许,如果channel大小不够或者已满,也会造成阻塞,但这是正常情况。
  • 死锁一般值的是这个地方用于得不到满足,一般在程序编译的时候会报死锁错误,编译失败。但是在select语句中不会阻塞,因为select可以执行其他的case。当然如果没有其他的case可执行也会报死锁。

参考

[1]从一个未初始化的chan和一个已关闭的chan中读取数据会发生什么



文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录