channel 的本质就是一个队列
channel
1.channel本质就是一个队列
2.数据是先进先出的
3.线程安全,多goroutine访问时,不需要加锁,也就是说channel本身就是线程安全的
4.channel是有类型的,一个string的channel只能存放string类型数据
管道的声明方式
var 变量名 chan 数据类型
举例:var intChan chan int 定义了一个intChan来存放int数据
func main() {
var intChan chan int
intChan = make(chan int, 3)
//2.看看intChan的本质是个什么玩意
fmt.Printf("intChan的值%v,intChan的地址%p", intChan, &intChan)
//3.向管道写入数据
intChan <- 10
num1 := 211
intChan <- num1
//4.看看管道的长度和cap(容量),管道不能自动增长
fmt.Printf("len=%v,cap=%v", len(intChan), cap(intChan))
//5.看看怎么读取,从管道中
var num2 int
num2 = <-intChan
fmt.Printf("num2=%d", num2)
//取完后再看看大小和长度
fmt.Printf("len=%v,cap=%v", len(intChan), cap(intChan))
//6.如果取出过多会爆deadlock
num3 := <-intChan
num4 := <-intChan
num5 := <-intChan
fmt.Printf("num3=%d", num3)
fmt.Printf("num4=%d", num4)
fmt.Printf("num5=%d", num5)
fmt.Printf("len=%v,cap=%v", len(intChan), cap(intChan))
}