goroutine和channel是Golang之所以被称之为“天生并发”的两个核心原因。

channel是goroutine之间进行通信的一种方式。与Unix中的管道功能非常类似。

猫哥说:其实就是数据结构里面的队列嘛~ 先进先出~

channel声明:

ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType 

channel是类型相关的,换言之:一个channel只能传递一种类型。例如:

var ch chan int  #ch只能传递int。

举个栗子:

package mainimport "fmt"func justequal(a int, c chan int) {c <- a
}func main() {c := make(chan int)go justequal(100,c)go justequal(200,c)// c <- 100 // 这样是肯定报错的!x, y:= <-c, <-c  // 从 c 中接收fmt.Println(x,y)
}

首先,定义一个channel,整型;

其次,用goroutine开个线程给channel塞进个内容;

然后,打印出来;(其实直接 fmt.Println( <-c, <-c)也是可以的,只是看起来总觉得哪里不对劲...)

最后,因为定义是 make(chan int),所以必须走goroutine方式给赋值。后面会说为什么。

================华丽丽的分割线===================

上面例子是最简单粗暴的channel——直肠子,存不住内容。实际上的channel,还是可以有“内涵”的。当然,IT行话,这个叫“缓冲”。

重新定义有“内涵”的channel:

ch := make(chan int, 10)

LOOK~ 内涵真的可以有,有10个捏~

这样一来,操作简单多了。再来个“栗子”:

package mainimport "fmt"func main() {c := make(chan int,10)c <- 100c <- 200c <- 300x,y,z := <-c, <-c, <-cfmt.Println(x,y,z)
}
结果:
100 200 300

是不是很清晰?先进先出。

定义channel时候,不写缓存大小,或者缓存数写成“0”,都表示无缓存。

有没有缓冲的区别,用个生活中收快递的情况对比一下。

快递到了~

1)快递员一直等你,你不来他不走(当然你不签收,他不能继续下一单),这个是没缓存的;

2)快递员不管你在不在,把快递包裹放在传达室,人就走了,忙下一单去了,这个是有缓存。

跟着猫哥学Golang 16 - Channel相关推荐

  1. 跟着猫哥学Golang[1] - Hello World!

     Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言.为了避免歧义,也可以写作 golang. 学什么语言,首先要来个Hello world. 来吧,Golang版的 pa ...

  2. 『跟着雨哥学AI』系列之七:趣味案例——动手制作专属证件照

    点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...

  3. 『跟着雨哥学AI』系列之六:趣味案例——基于U-Net的宠物图像分割

    点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...

  4. 跟着鸟哥学Linux系列笔记1

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...

  5. 『跟着雨哥学AI』系列之八:趣味案例——有关NLP任务数据预处理的那些事儿...

    点击左上方蓝字关注我们 课程简介: "跟着雨哥学AI"是百度飞桨开源框架近期针对高层API推出的系列课.本课程由多位资深飞桨工程师精心打造,不仅提供了从数据处理.到模型组网.模型训 ...

  6. 跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复!

    跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复! 其实人工智能回复,现在网上有很多开源的机器学习,AI学习的框架,但是最重要的一点就是没有语料,也就是没有相互回答的数据内容. 所以这个 ...

  7. 阿里短信发送(跟着宝哥学java)

    1 短信发送 1.1 注册阿里云 1.2 查找短信服务:创建签名 1.3 创建模板 1.4 获取accessKey和accesssKeySecret 1.5 项目中引入依赖 <!--短信发送的依 ...

  8. 跟着鬼哥学爬虫-5-更新妹子图库质量,提高微信群聊发图速度

    跟着鬼哥学爬虫-5-更新妹子图库质量,提高微信群聊发图速度 第三篇中的图库,群里大家都说质量稍微次一点,现在重新爬了个网站更新一下. 比上一篇的代码也优化了一点,对于自动保存的文件名,采用数字方式直接 ...

  9. 跟着鸟哥学linux【一】

    今天开始跟着鸟哥学习linux了,这组博客将会成为我跟着鸟哥学习linux的笔记和心得. 虚拟机这个东西之前已经接触过了,环境也配置好了. ctrl+alt+(f1-f9)是切换不同的tty,什么是t ...

  10. 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战

    本书结合了机器学习.数据分析和Python语言,通过案例以通俗易懂的方式讲解了如何将算法应用到实际任务. 全书共20章,大致分为4个部分.第一部分介绍了Python的工具包,包括科学计算库Numpy. ...

最新文章

  1. puppet cert maintain
  2. python【蓝桥杯vip练习题库】ALGO-234第五次作业:字符串排序
  3. (背)顺序容器的操作-向容器中插入元素详细总结
  4. 最简单的卸载vrv方法_低端赤道仪粗对极轴最简单方法
  5. python导入文件列行_python读写csv文件并增加行列的实例代码
  6. IntelliJ IDEA 添加copyright
  7. 开源的方舟编译器将进入深圳大学课堂
  8. 【Qt串口调试助手】1.7 - QLabel标签插入链接,修改Qt应用图标
  9. 近300个 Windows 10 可执行文件易受 DLL 劫持攻击
  10. 发送邮件 空格 java_java实现邮件发送功能
  11. 禅道类似软件_整理几款开源项目管理软件
  12. RapidMiner介绍与实践(一)决策树
  13. 只需10行代码就让你的U盘变成纯净版winPE系统安装启动盘
  14. Team Foundation Server BuilderService LOG
  15. word2016 卡顿_office2016打开很慢怎么办?office2016打开卡顿缓慢的解决方法
  16. Java编程题修院子_2020大学moocJava程序设计题目答案
  17. PostgreSQL的json和jsonb比较
  18. Ubuntu输入正确密码,屏幕一闪,又回到登录界面
  19. 大战华为4年,香奈儿再次败诉!网友:你瞎还是我瞎?
  20. vue学习入门——Idea中安装vue插件

热门文章

  1. Elasticsearch 聚合系列:adjacency matrix aggregation(邻接矩阵聚合)
  2. 椭圆检测 Arc Adjacency Matrix-Based Fast Ellipse Detection 代码和数据集使用教程
  3. matlab syms类型,matlab中syms类型的转换
  4. 1446. 连续字符【我亦无他唯手熟尔】
  5. 802.1Q封装的VLAN数据帧格式
  6. axure中图表背影_Axure教程:如何制作可视化图表?
  7. OFDM专题之如何计算OFDM一个符号的功率,功率谱密度
  8. CMMI 认证为什么要提前准备?评估方式是怎样的?
  9. MPB:中科院植物所杨文强组-​莱茵衣藻遗传连锁分析方法
  10. php 公众平台开发教程,微信公众平台开发入门教程