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

你可能感兴趣的文章
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>