Channel操作方式和状态

channel只有三种操作方式

  1. Read
  2. Write
  3. Close

有4种状态

  1. nil
  2. 打开且非空
  3. 打开且空
  4. 关闭的

有三种类型

  1. 只写
  2. 只读
  3. 可读可写

不同的操作对不同状态的channel产生的影响

操作方式 Channel状态 结果
Read nil 阻塞
Read 打开且非空 输出值
Read 打开且空 阻塞
Read 关闭的 false
Read 只写 编译错误
Write nil 阻塞
Write 打开的但填满的 阻塞
Write 打开且但为填满的 写入值
Write 关闭的 panic
Write 只读 编译错误
Close nil panic
Close 打开且非空 关闭channel,读取成功直到通道耗尽,然后读取默认值
Close 打开且空 关闭channel,督导生产者的默认任职
Close 关闭的 panic
Close 只读 编译错误

怎样避免panic

编译错误我们通过编译器就可以防止了,但是我们怎么能避免panic呢。我们已经知道了panic的出现时机,避免出现这种情况就可以了
panic的三种情况

  1. 写入关闭的channel
  2. 关闭关闭的channel
  3. 关闭为nil的channel

首先我们将channel分为两组,

  1. channel的生成者

    1. 实例化channel
    2. 执行写操作
    3. 关闭channel
    4. 执行以上3点,并通过只读channel将他们暴露出去
  2. channel的消费者
    1. 要知道channel是否关闭了
    2. 正确处理阻塞

示例

package mainimport "fmt"func main() {// channel 拥有者chOwner := func() <-chan interface{} {// 实例化channelch := make(chan interface{})go func() {// 写入完成后,关闭channeldefer close(ch)for i := 0; i < 10; i++ {// 拥有者负责写入ch <- i}}()// 将只读channel 返回return ch}chCon := func(ch <-chan interface{}) {// 只需要知道channel何时被关闭的即可for i := range ch {fmt.Println(i)}}ch := chOwner()chCon(ch)
}

channel使用法则相关推荐

  1. 《海龟交易法则》经典梳理

    序言,第一-第三章 海归交易法则 序言 本书是历史上最好的5本交易学著作之一的理由:1,重要的不是交易系统而是交易者贯彻交易系统的能力.2,用浅显易懂的语言阐述行为金融学的某些原理如何用于交易和影响交 ...

  2. 坎宁安法则又称“卑鄙的人”

    by Howard Lo 霍华德·罗 坎宁安法则又称"卑鄙的人" (Cunningham's Law AKA Getting Answers From Snobby People) ...

  3. netty源码分析系列——Channel

    2019独角兽企业重金招聘Python工程师标准>>> 前言 Channel是netty中作为核心的一个概念,我们从启动器(Bootstrap)中了解到最终启动器的两个关键操作con ...

  4. 信息论与编码_信息与编码系列(五)不可靠信道——决策法则、Hamming距离与信息论基本定理...

    目录 序 决策法则(decision rules) Hamming距离 信息论基本定理--Shannon 定理 Shannon定理的逆命题 序 这个算是正本书中关于信息论的最后内容了,后面就是关于编码 ...

  5. 21英里法则_一英里的跑道将带您到任何地方

    21英里法则 Did anyone else go through a phase when they were young when they wanted to become a pilot? I ...

  6. python:海龟交易法则 画唐奇安通道

    回忆一下海龟交易法则的策略: 入场条件:当收盘价突破20日价格高点时,买入一单元股票: 加仓条件:当价格大于上一次买入价格的0.5个ATR(平均波幅),买入一单元股票,加仓次数不超过3次: 止损条件: ...

  7. 交易员学堂第五课 海龟交易法则的术与道

    节选自<way of the turtle> 转载请注明出处 http://wallstreetcn.com/node/15496 作者: Curtis M. Faith 编译:红檀@华尔 ...

  8. 天勤python_天勤量化策略库:海龟交易法则(难度:中级)

    什么是海龟交易法则 海龟交易法是著名的公开交易系统,其法则覆盖了交易的各个方面,并且不给交易员留下一点主观想象决策的余地.它是一套非常完整的趋势跟随型的自动化交易策略,具备一个完整的交易系统的所有成分 ...

  9. 灰度发布:灰度很简单,发布很复杂灰度发布(灰度法则)的6点认识

    什么是灰度发布,其要点有哪些? 最近跟几个聊的来的同行来了一次说聚就聚的晚餐,聊了一下最近的工作情况如何以及未来规划等等,酒足饭饱后我们聊了一个话题"灰度发布". 因为笔者所负责的 ...

  10. Donchian Channel(唐奇安通道)及其发明人Richard Donchian的前世今生

    Richard Donchian是谁 Richard Donchian(1905.9-1993),"趋势交易之父",是职业期货交易员,于20世纪中期开发了Donchian Chan ...

最新文章

  1. 【BZOJ-30391057】玉蟾宫棋盘制作 悬线法
  2. MongoDb数据库面试整理
  3. 没有找到合适的方法来重写_玻璃片价格太高?你可能没有找到合适的供应商
  4. 八、VueJs 填坑日记之参数传递及内容页面的开发
  5. linux2.6内核Makefile详解
  6. 我的梦幻动画实习工作总结
  7. java处理表单变量_Java自学之SpringMVC:接收表单数据
  8. 优酷股东变更 阿里通过全资子公司土豆继续持有优酷
  9. linux创建环境变量有什么用,环境变量和shell变量到底有什么区别呢?
  10. Unity Shader 噪声消融特效 - 剑灵死亡特效
  11. 产品经理改需求这件事
  12. 偏见:人工智能辅助决策的隐患
  13. Python与SEO,三大SEO网站查询工具关键词查询采集源码!
  14. Golang 流媒体音视频网络传输开源项目-LAL
  15. 数据库原理及应用教程(第4版|微课版)陈志泊-第三章习题
  16. 弘辽科技:拼多多怎么提升访客量?有哪些方法?
  17. Flutter 自定义组件实战
  18. WEB在打印fr3报表上显示二维码和图片
  19. 调用spenssl库时可以查询到openssl版本但是编译报错
  20. 【论文笔记】—本征图像分解—Unsupervised—USI^3^D—2020-CVPR

热门文章

  1. Invalid bound statement (not found): com.example.wyl.mapper.PeijianDAO.selectList异常错误
  2. 【计算机组成原理】 数据的表示和运算
  3. Winedit 下载第三方库
  4. 优知学院创始人陈睿:怎样做好一个创业公司CTO?
  5. ●一些天马行空的随想
  6. Component xxx does not have a method xxx to handle event xxx
  7. Navicat:Access violation at address xxxxxxxxx in module 'navicat.exe'.Read of address xxxxxx
  8. 腾讯阿里面试题【图文详解】:25匹马5赛道选前三,最少要跑几次?赛几场?
  9. 如何在WordPress中添加免费实时聊天(简便方法)
  10. DINO:一种新的端到端目标检测器(速读版)