博客
关于我
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/

你可能感兴趣的文章
mysql启动以后会自动关闭_驾照虽然是C1,一直是开自动挡的车,会不会以后就不会开手动了?...
查看>>
mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
查看>>
Mysql启动失败解决过程
查看>>
MySQL启动失败:Can't start server: Bind on TCP/IP port
查看>>
mysql启动报错
查看>>
mysql启动报错The server quit without updating PID file几种解决办法
查看>>
MySQL命令行登陆,远程登陆MySQL
查看>>
mysql命令:set sql_log_bin=on/off
查看>>
mySQL和Hive的区别
查看>>
MySQL和Java数据类型对应
查看>>
mysql和oorcale日期区间查询【含左右区间问题】
查看>>
MySQL和SQL入门
查看>>
mysql在centos下用命令批量导入报错_Variable ‘character_set_client‘ can‘t be set to the value of ‘---linux工作笔记042
查看>>
Mysql在Linux运行时新增配置文件提示:World-wrirable config file ‘/etc/mysql/conf.d/my.cnf‘ is ignored 权限过高导致
查看>>
Mysql在Windows上离线安装与配置
查看>>
MySQL在渗透测试中的应用
查看>>
Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
查看>>
Mysql在离线安装时提示:error: Found option without preceding group in config file
查看>>
MySQL基于SSL的主从复制
查看>>
Mysql基本操作
查看>>