golang二三事之关于channel你知道和不知道的那些事

channel

  1. 向一个关闭的channel里,写数据
    无论是否带缓存的channel,都会引发错误

panic: send on closed channel

  1. 向一个关闭的channel里,读数据。

    1. 带缓存的channel

      缓存里还有数据
      返回 数据, true

      缓存里没有数据
      返回 数据类型未初始化零值, false

    2. 不带缓存的channel

      缓存里没有数据
      返回 数据类型未初始化零值, false

      缓存里有数据
      执行不到 从缓存里读数据就报错。因为数据没人读就阻塞在哪里了

  2. 关闭一个已经关闭的channel
    会报错,提示不能关闭一个已经报错的channel

  3. 只有channel的发送方可以关闭channel,接收方不能关

  4. 需要及时关闭channel的场景(必须close)
    当对于一个channel进行for range 循环时,如果发送方发完数据后不及时关闭channel,则会引起接受方的报错

  5. 发送完数据的channel是否要立即close
    不需要,比如广播模式下当最后一条数据发送完成后,也许还有接受者没有接收完数据

  6. Channel关闭原则

不要在消费端关闭channel,不要在有多个并行的生产者时对channel执行关闭操作。 也就是说应该只在[唯一的或者最后唯一剩下]的生产者协程中关闭channel,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值