channel模式

根据同步方式不同,channel有两种模式:

1、同步模式,形式如下:

1
ch := make(chan int)

2、队列模式,形式如下:

1
ch := make(chan int, 10)

根据数据方向流不同,channel类型可以有以下三种模式:

  1. 写操作模式(只发送)
  2. 读操作模式(只接收)
  3. 读写操作模式(不限发送与接收)

channel操作

channel有以下操作:

  1. 创建
  2. 关闭
  3. 写(发送)操作
  4. 读(接收)操作

这些操作都是原子操作

channel状态

根据模式与操作,channel有以下状态:

  1. 同步写阻塞
  2. 同步读阻塞
  3. 关闭状态
  4. 队列写阻塞
  5. 队列读阻塞
  6. 队列可读写
  7. nil状态

channel状态与操作之间关系

状态/操作 写操作 读操作 关闭 创建
nil状态 写阻塞 写阻塞 产生panic(close of nil channel) -
同步写阻塞 写阻塞 成功读取数据 进入关闭状态,产生panic -
同步读阻塞 成功写入数据 读阻塞 进入关闭状态 -
关闭状态 产生panic 立即返回(nil,false) 产生panic -
队列写阻塞 写阻塞 成功读取队列中数据 进入关闭状态,成功写入队列的数据可读 -
队列读阻塞 成功写入数据 读阻塞 进入关闭状态 -
队列可读写 成功写入数据 成功读取数据 进入关闭状态,成功写入队列的数据可读 -

由于个人水平有限,有什么不足与错误,敬请指正!