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


你可能感兴趣的:(2019-03-08 channel)