2019-03-08 channel

channel简介

channel 是用来通信的,通过它,一个 goroutine 可以想另一 goroutine 发送消息。channel 本身还需关联了一个类型,也就是 channel 可以发送数据的类型。例如: 发送 int 类型消息的 channel 写作 chan int 。


channel类型

channel有2种 有size 和无size


无size


有size

ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .

它包括三种类型的定义。可选的<-代表channel的方向。如果没有指定方向,那么Channel就是双向的,既可以接收数据,也可以发送数据。


单向无法转为双向



重复关闭同一个 channel 会产生 panic

重复关闭同一个 channel
结果



向一个已关闭的 channel 中发送消息会产生 panic


向一个已关闭的 channel 


结果



无size的channel要配合go使用


结果


且输入要在go里


结果



go 与channel


1有没有size的channel配合go都不会出现意外

1

2.1无size的channel 有关闭channel

关闭后不管读几次值都是0

2.2无size的channel 没有关闭channel

没关闭读一次正常


没关闭读的次数只要大于1就会报错fatal error: all goroutines are asleep - deadlock!


2.3 有size的channel 没有关闭channel


写几次就要读几次,不然会报错


2.4 有size的channel 有关闭channel


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容