go chanel

1、发送数据
1.1 直接发送数据
直接发送数据是指 如果已经有阻塞的接收goroutines,那么数据将被直接发送给接收goroutine

1.2 缓冲区有可用空间

1.3 缓冲区无可用空间,goroutine要么直接返回要么阻塞等待

2、接收数据
2.1 直接接收数据
2.1.1 没有缓冲区,如果已经有阻塞发送的goroutines,直接从阻塞的goroutine接收数据

2.1.2有缓冲区但缓冲区满了,则从缓冲区接收数据,如果有阻塞的goroutine则唤醒

2.2 缓冲区无数据,可以确定目前这个channel既没有待发送的goroutine,并且缓冲区也没有数据,goroutine要么直接返回要么阻塞等待

2.3 缓冲区有数据

3、chanel关闭

3.1  一个为nilchannel不允许进行关闭

3.2 不可以重复关闭channel

3.3 获取当前正在阻塞的发送或者接收的goroutine,他们都处于挂起状态,然后进行唤醒。这是发送方不允许在向channel发送数据了,但是不影响接收方继续接收元素,如果没有元素,获取到的元素是零值。使用val,ok := <-ch可以判断当前channel是否被关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值