Notes
Go
通道

通道

通道(Channel)是 Go 中一个重要的数据结构。Channel 可以视作为消息队列线程同步而创建的数据结构。

创建通道

通道是一个引用类型,需要使用 make 函数来创建:

ch := make(chan int)

或者:

ch := make(chan int, 100)
  • chan 是关键字,表示通道类型。
  • int 是通道中元素的类型。
  • 100 是通道的缓冲区大小,如果不指定,则表示是无缓冲通道。

Channel 可以看作一个消息通道,通道的主要功能是保证数据通过,缓冲区的意义在于缓存数据,以便发送者和接收者之间的速度不一致时能够缓冲一部分数据。如果没有缓冲区,那么需要读操作就绪时,写操作才能继续,这样就会造成阻塞。这如同一个没有仓库的货站,必须有等待接收货物的车辆,送货的车辆才能顺畅送货,否则送货车辆只能等待。缓冲区可以看作是一个仓库,送货车辆可以把货物放在仓库里,等待接收货物的车辆再从仓库里取货。

通道的读写

写入数据:

ch <- i

读取数据:

i := <-ch

打印数据:

count := 5
 
ch := make(chan int, count)
 
for i := 0; i < count; i++ {
    ch <- i
}
 
for i := 0; i < count; i++ {
    fmt.Println(<-ch)
}

打印结果:

0
1
2
3
4

通道的实现原理*

TODO 74