Go语言中的通道相当于一个先进先出的队列, 在Go语言中创建队列的方式是使用make
函数, 该函数的第一个参数为通道的类型, 第二个参数是通道的容量, 我们对通道有两种操作分别是发送元素和接收元素操作, 注意这里的发送操作和接收操作都是对我们操作者而言的。
同时如果一个通道的容量为0的时候, 我们称这种通道为非缓冲通道, 否则这种通道为缓冲通道。
package main
import "fmt"
func main() {
ch1 := make(chan int, 3)
ch1 <- 1
ch1 <- 2
ch1 <- 3
elem1 := <- ch1
fmt.Printf("The first element %d", elem1)
}
关于通道有三个特性:
- 互相排斥
- 一气呵成
- 阻塞
互相排斥指的是每个发送操作之间是有顺序的, 我们需要注意的是发送元素进入通道的元素, 会首先复制一个副本, 然后将这个副本给发送进去。
但是不可能仅仅复制一半后就将它发送进去了, 它一定是一气呵成的。
上面我们说过发送操作之间是有顺序的, 互相排斥的, 如何实现互相排斥, 就是通过阻塞性质, 当第一个发送操作正在进行的时候, 我们会在该发送位置处进行阻塞, 使得其余发送操作不可以进行。
标签:元素,发送,排斥,详解,Go,操作,通道 From: https://www.cnblogs.com/zhengel/p/16993948.html