如果你看的有些发蒙 , 觉得好似有些理解了又好似没有的话 , 那么很简单的一个办法是在理解的时候把这个使用场景做一个变幻 。把chan的使用场景想象成我们之前介绍过的生产者消费者设计模式 , chan在其中扮演的角色其实就是队列 。
生产者往队列当中传输数据 , 消费者进行消费 , 唯一不同的是这个队列的容量是1 , 必须要生产和消费端都准备就绪了才会进行数据传输 。
chan的缓冲前文说了 , chan的容量只有1 , 只有消费端和生产端都就绪的时候才可以传输数据 。我们也可以给chan加上缓冲 , 如果消费端来不及把所有的数据都消费完 , 允许生产端先把数据暂时存在chan当中 , 先不发生阻塞 , 只有在chan满了之后才会阻塞 。
用法也很简单 , 我们在通过make创建chan的时候多加上一个参数表示容量即可 , 和我们之前创建切片的道理很类似 。
Ch := make(chan int, 100)比如这样 , 我们就创建了一个缓冲区为100的信道 。
但多说一句 , 其实这种情况不太常用 , 原因也很简单 。因为上下游的消费情况是统一的 , 如果生产者生产的速度过快 , 而消费端跟不上的话 , 即使把它先暂存在缓冲区当中也没什么用 , 早晚还是会要阻塞的 。
close当我们对信道使用结束之后 , 可以通过close语句将它关闭 。
Close这个操作只能在生产端进行 , 消费端如果close信道会引发一个panic 。我们在从chan接收数据的时候 , 可以加上一个参数判断信道是否关闭 。
v, ok := <- chif !ok { return}这样我们就可以判断chan关闭的时间了 。
推荐阅读
- 常见的精神疾病有哪些? 精神疾病
- 电视剧将军在上剧情简介 将军在上讲的是什么故事
- 我认识的女作家豆豆 谁有作家豆豆的详细简介
- 常见名言名句大全 经典名言名句
- 河南嵩山少林寺介绍 少林寺简介
- 农村常见的马虎眼草碰不得 马虎眼草的功效与作用都有什么植物
- 退伍军人军龄计算公式 徐璐是军人吗个人资料简介10年军龄
- 麻糖的简介
- 质量管理常见的收集数据的方法有
- 峭壁英雄,盘羊之殇 盘羊角的简介有哪些
