管道 channel 管道的原理队列的先进先出的实现

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))
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值