前言
channel是Go语言的核心类型,可以理解为管道,通过channel并发核心单元就可以发送或者接收数据进行通讯。Go的Goroutine是实际并发执行的实体,Goroutine通过channel来实现通信。通道的特性像队列,遵循先进先出(FIFO)规则,保证收发数据的顺序。
写之前在列举关于channel的章节时,发现一篇文章出来的话会篇幅过长,所以打算分为上下两篇进行整理,上篇主要是一些使用和底层结构以及channel的创建,下篇主要在收发以及关闭channel的代码和逻辑上面。
1:声明和初始化
通道的声明如下:
var 通道变量 chan 通道类型
var ch1 chan int
声明后的通道类型是空值nil,给一个nil channel发送数据,造成永远阻塞、从一个nil channel接收数据,造成永远阻塞,就像 map 和 slice 数据类型一样, channel必须进行make后才能使用
//通道实例 = make(chan 数据类型, 容量)
ch1 := make(chan int, 10)
容量代表Channel容纳的最多的元素的数量,代表Channel的缓存的大小,如果没有设置容量,或者容量设置为0, 说明Channel没有缓存,在后面的channel的类型中会说到不同类型channel的区别。
2:基本操作
channel的操作符是