Golang提供了一种称为通道的机制,用于在协程之间共享数据。当函数作为协程执行并发活动时,需要它们共享资源或数据,通道便充当协程之间的管道(管道),提供一种确保同步交换数据的机制。

需要在声明通道时指定数据类型,可以共享任何类型的值和指针。数据在通道上传递:在任何给定的时间,只有一个协程可以访问数据项:因此在设计上是不会发生资源竞争的情况。

根据数据交换的行为,有两种类型的通道:无缓冲通道和缓冲通道。无缓冲通道用于在协程之间执行同步通信,而缓冲通道用于执行异步通信。在发送和接收数据瞬间,无缓冲通道保证数据交换是在两个协程之间执行,缓冲通道没有这样的保证。

通道由make函数创建,该函数指定chan关键字和通道的元素类型。

创建无缓冲和有缓冲的通道

内置函数make能够用来创建无缓冲和有缓冲的通道,参数指定chan关键字和的要交换的数据类型

使用操作符

从通道中取出值

无缓冲通道

无缓冲通道没有指定容量来保存值。因此,在传输任何数据之前,这种类型的通道要求发送和接收数据的协程在同一时刻都要准备就绪。如果两个协程在相同的时刻还未准备好,则通道将使执行数据传输的两个协程阻塞等待对方。同步是在通道上发送和接收数据的基础,发送和接受数据双方一个都不能少。

缓冲通道

缓冲通道有指定的容量来保存值。这种类型的通道,不强制传输数据的协程双方在同一时刻准备好执行发送和接收,通过阻塞协程来协调双方的通信。与无缓冲通道不同,缓冲通道发送或接收的阻塞有不一样的情况:只有在通道中没有要接收的值时,接收方会阻塞;只有在没有可用缓冲区来放置要发送的值时,发送方才会阻塞。

每次运行此程序时,输出的结果不同,这是因为程序和Go调度程序的随机性。

在上面的程序中,创建一个字符串类型的缓冲通道,其容量为10。WaitGroup的计数是5,代表5个协程。将10个字符串发送到通道中,以模拟协程所要做的工作。最后一个字符串发送到通道后,通道将关闭,主函数将等待所有项目完成。

go语言通道插入0_Go语言入门必知教程-通道相关推荐

  1. go 怎么等待所有的协程完成_Go语言入门必知教程-协程

    Golang中的并发性是指函数独立运行的能力.Goroutines就是能够并发运行的函数,也叫协程,它们是Golang提供作为并发处理操作的方法. 使用go语句创建协程goroutines 要将函数作 ...

  2. ostream作为函数返回值_Go语言入门必知教程-函数

    函数是为了执行特定任务而存在于程序内的一组语句,函数接受输入并返回输出. 函数允许将常用的代码块提取出来成为单个组件. 使用最广的Go函数是main(),每个独立的Go程序都必须有个main函数. 创 ...

  3. goland创建一个不限长度的字节切片_Go语言入门必知教程-切片

    切片是一种灵活的和可扩展的数据结构,用于实现和管理数据集.切片由多个元素组成,所有元素都是相同类型的.切片是动态数组的一部分,可以根据需要进行增长和收缩.与数组一样,切片也可以索引.切片具有容量和长度 ...

  4. pkpm快速入门教程_PKPM教程入门必知技巧

    <PKPM教程入门必知技巧>由会员分享,可在线阅读,更多相关<PKPM教程入门必知技巧(166页珍藏版)>请在人人文库网上搜索. 1.PKPM软件的应用,主要内容,通过对一个工 ...

  5. web前端入门必知的10个技术

    随着HTML5的发展和普及,了解HTML5将成为Web开发人员的必修课.如何把网页做得更美观,对用户更有吸引力,不仅是企业对前端开发人员要求,更是一个合格的web前端工程师的自我修行.今天小编就跟大家 ...

  6. powershell 开发入门_详谈Ubuntu PowerShell(小白入门必看教程)

    早在去年八月份PowerShell就开始开源跨平台了,但是一直没有去尝试,叫做PowerShell Core. 这里打算简单介绍一下如何安装和简单使用,为还不知道PowerShell Core on ...

  7. rust原地复活_rust腐蚀游戏新手入门必知小技巧 Rust腐蚀游戏中的12个实用小技巧...

    rust腐蚀游戏新手入门必知小技巧,想必还有很多小伙伴还不太了解,下面小编给大家带来了Rust腐蚀游戏中的12个实用小技巧,一起来看看吧. rust腐蚀游戏新手入门必知小技巧 Rust腐蚀游戏中的12 ...

  8. c语言计算机培训,C语言计算机基础学习||新手入门必看

    本次内容笔者将完全抛弃传统教学的形式,通过自己所学所闻得出来的心得,用通俗易懂的语言结合生活,来让大家更好的认识计算机编程,更好的入门计算机基础. 笔者也想用自己的论述告诉大家,专业知识有时会比较枯燥 ...

  9. 【Nodejs】Nodejs入门必知

    https://i5ting.github.io/How-to-learn-node-correctly/#1 1.3.2. 安装Node.js环境 3m安装法 nvm(node version ma ...

最新文章

  1. 2018/-4-11遗传,差分进化,免疫,蚁群算法中的公式
  2. Python基础实战之函数的参数讲解(三)
  3. 2020-1024=996
  4. Tensorflow-gpu 在Anaconda中使用出现问题的解决方式
  5. VBS 脚本语言-利用vbs调用ie浏览器访问百度查天气实例演示
  6. Python生成器的用法,使用生成器灵活的生成斐波那契数列
  7. 怎么导入sklearn包_在导入sklearn包是报错
  8. 语音情感识别----语音特征集之eGeMAPS,ComParE,09IS,BoAW
  9. (译) JSON-RPC 2.0 规范(中文版)
  10. cacti pdo_mysql_搭建配置cacti,采集信息监控
  11. 白盒测试六种方法案例分析
  12. Java之设计模式详解 (转)
  13. 5条能让web前端至少手拿20万年薪的特性!
  14. [版本1.11.4已修复]简书安卓UI界面Bug:主界面消失
  15. 隐私问题不想用自己手机收验证码怎么办?
  16. matlab控制信号发生器,Matlab 跳频信号发生器
  17. python做excel表格合并_Python实战:合并 Excel 表格
  18. 2022年中国国债收益率走势(附一年期、二年期、三年期、七年期、十年期、二十年期、三十年期)[图
  19. 解决!适用黑苹果解决充电和使用电池中黑苹果自动睡眠
  20. 软件工程-软件工程基本概念

热门文章

  1. 谷歌“夜莺计划”秘密采集数百万美国人健康隐私;联发科首款7nm产能的5G芯片;2019年天猫双11落幕,最终成交额2684亿……...
  2. 不止 5G 和鸿蒙,华为最新大招,扔出 AI 计算核弹
  3. 大数据实践的6个阶段
  4. Hadoop精华问答:Hadoop框架最核心的设计是?
  5. 有问有答 | Storm技术内幕与实践精华问答
  6. 不小心把桌面进程结束了怎么办_微信不小心把天聊死怎么办?试试这3招,分分钟结束“尬聊”...
  7. C语言rec文件如何打开,REC 文件扩展名: 它是什么以及如何打开它?
  8. RuoYi-Vue 部署 Linux环境 若依前后端分离项目(war 包+nginx版本)
  9. MySQL 8.0.26 图形化安装教程 (windows 64位)
  10. java解决导出word用wps打开正常,用office打开是html的标签的问题