channel通道
通道:channel是一种特殊的类型,通道像一个传送带或者队列,总是遵循先入先出的规则,保证收发数据的顺序。每一个通道都是一个具体类型的导管,也就是声明channel的时候需要为其指定元素类型
如何定义通道类型:
这样定义出来的是空值(nil),不能使用
可以使用make初始化之后才能使用
例如:
通道channel操作:
发送 send
接收 receive
关闭 close
发送 接收都使用<-符号
chan <-t 只写通道 <-chan t 只读通道
死锁是指两个或两个以上的协程的执行过程中,由于竞争资源而阻塞的现象
死锁如何如何形成的: 1.一个通道在一个主goroutine协程里同时进行读和写。也会造成死锁 2.协程开启之前就放数据,还没有准备好,就放数据,就会造成死锁
select:可以同时响应多个通道进行操作
缓冲通道:先进先出的原则。第一个进去的第一个被读取到,可以理解为,一个从管道的一端放入,一个从管道的另一端读取。
for range 就是遍历所有数据,当没有数据的时候也就循环结束。所以可以 替代 v,ok:=<-ch1