0%

谈谈 channel.

兄弟,谈一谈你对 channel 的理解。

  • 首先呢,通道主要作用是实现协程之间的交流。
  • 通道是通过 make 函数来进行创建的。
  • 通道可以分为无缓冲通道和有缓存通道。
  • 往有缓存通道中发送数据时,如果缓存没满,则不会阻塞,否则阻塞。
  • 往无缓存通道中发送数据时,如果通道没有协程在接受数据,则会阻塞,发送和接受是同步的。
  • 如果通道已关闭,从通道中接受数据的协程则不再阻塞,可以通过 ok 关键字查看是否取到数据。
  • 关闭已关闭的通道,会panic
  • 给已关闭通道发送数据将会触发 panic

nil channel 和 未初始化channel 读写总结:

  • nil channel:未初始化的channel,即没有执行make操作

  • closed channel:执行了closed操作的channel

1
2
3
4
5
6
7
对nil channel的读写会永久block

关闭nil channel 会panic

向closed channel写入会发生panic

从closed channel读取会立即读出零值