基础简介
Channel指的是一个管道,管道之间可以进行数据交换,他常用于线程之间的通信,Channel是指针类型的数据,他是和C一样使用make来分配内存的。他的定义语法格式如下:
ch := make(chan int)
这句话的含义是创建一个channel,但是这个channel限定了数据的类型,他只可以是int类型,而channel的另一头也只可以读取int类型的值,属于双向绑定数据类型了。
基础操作
我们可以从channel中读取一个值。
<- ch
从channel中读取一个值,并且保存在变量中。
name := <- ch
我们可以发现一个规律,那就是当channel出现在<-
左边是表示发送,而出现在右边时表示接收。
data := <- a // read from channel a eg: chan <- //发送数据
a <- data // write to channel a eg: <-cjan// 接收数据
一个通道接受和发送数据的时候默认是阻塞的,阻塞的意思是程序被堵住了。
高级操作
每一个channel有三种操作:
- send:表示发送数据。
- receive:表示接受数据。
- close:表示关闭channel。
channel的状态
channel有三种基本状态:nil(空)、open(开启)、closed(关闭)。每种状态下配合每种操作都有不同的情况。
- 当为空的时候,无论是发送还是接受都是阻塞的。
- 当为open的时候,无论是发送还是接受都是允许的。
- 当为关闭状态的时候比较特殊,你进行发送的时候会直接报错,但是当你接受的时候是可以允许的。