通道
通道(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