兄弟,谈一谈你对 channel 的理解。
- 首先呢,通道主要作用是实现协程之间的交流。
- 通道是通过 make 函数来进行创建的。
- 通道可以分为无缓冲通道和有缓存通道。
- 往有缓存通道中发送数据时,如果缓存没满,则不会阻塞,否则阻塞。
- 往无缓存通道中发送数据时,如果通道没有协程在接受数据,则会阻塞,发送和接受是同步的。
- 如果通道已关闭,从通道中接受数据的协程则不再阻塞,可以通过 ok 关键字查看是否取到数据。
- 关闭已关闭的通道,会panic
- 给已关闭通道发送数据将会触发 panic
nil channel 和 未初始化channel 读写总结:
nil channel:未初始化的channel,即没有执行make操作
closed channel:执行了closed操作的channel
1 | 对nil channel的读写会永久block |