channel
- 向一个关闭的channel里,写数据。
无论是否带缓存的channel,都会引发错误
panic: send on closed channel
-
向一个关闭的channel里,读数据。
-
带缓存的channel
缓存里还有数据
返回 数据, true缓存里没有数据
返回 数据类型未初始化零值, false -
不带缓存的channel
缓存里没有数据
返回 数据类型未初始化零值, false缓存里有数据
执行不到 从缓存里读数据就报错。因为数据没人读就阻塞在哪里了
-
-
关闭一个已经关闭的channel
会报错,提示不能关闭一个已经报错的channel -
只有channel的发送方可以关闭channel,接收方不能关
-
需要及时关闭channel的场景(必须close)
当对于一个channel进行for range 循环时,如果发送方发完数据后不及时关闭channel,则会引起接受方的报错 -
发送完数据的channel是否要立即close
不需要,比如广播模式下当最后一条数据发送完成后,也许还有接受者没有接收完数据 -
Channel关闭原则
不要在消费端关闭channel,不要在有多个并行的生产者时对channel执行关闭操作。 也就是说应该只在[唯一的或者最后唯一剩下]的生产者协程中关闭channel,