博客
关于我
golang channel的行为
阅读量:426 次
发布时间:2019-03-06

本文共 581 字,大约阅读时间需要 1 分钟。

 

1. 读nil的channel是永远阻塞的。关闭nil的channel会造成panic。

2. closed channel的行为:

  (1)向close的channel发消息会panic,关闭一个已经关闭的channel,也会panic。所以应该由生产者关闭channel。

  (2)如果close的channel还有数据,仍然可以读取。

  (3)读取close的并且空的channel,会马上返回零值(注意chan int会返回0),所以可以用于广播。

  (4)val,ok = <- ch, ok=false表示channel空并且close了 (注意不是“或者”)。结合(1)、(2),这里可以用于消费者。

  (5)close channel可以用来广播,因为读取或者select关闭的channel,会马上返回。如果是存在多个生产者,此时不能随便关闭channel,可以通过关闭另一个channel来停止消费行为。

3. 可以对channel使用range。这样不用写select,显得代码简洁。

 

4. select是随机的,select越多channel消耗越多。

 

参考:

https://stackoverflow.com/questions/34897843/why-does-go-panic-on-writing-to-a-closed-channel

 

转载地址:http://yekuz.baihongyu.com/

你可能感兴趣的文章
Nacos配置中心集群原理及源码分析
查看>>
nacos配置在代码中如何引用
查看>>
nacos配置新增不成功
查看>>
nacos配置自动刷新源码解析
查看>>
nacos集成分布式事务插件Seata的序列化问题,实际上是Seata本身存在bug!!
查看>>
Nacos集群搭建
查看>>
nacos集群搭建
查看>>
nacos集群网络分区对的影响和运维方式
查看>>
nacos集群节点故障对应用的影响以及应急方法
查看>>
nacos集群配置详解
查看>>
Nagios 3.0 Jumpstart Guide For Linux – Overview, Installation and Configuration
查看>>
nagios 实时监控 iptables 状态
查看>>
WAP短信格式解析及在Linux下用C语言实现
查看>>
nagios+cacti整合
查看>>
Nagios介绍
查看>>
nagios利用NSCient监控远程window主机
查看>>
nagios安装文档
查看>>
nagios服务端安装
查看>>
Nagios自定义监控脚本
查看>>
name_save matlab
查看>>