案例:

思路分析:

代码实现:

package mainimport "fmt"func writeData(intChan chan int) {for i := 1; i <= 50; i++ {intChan <-i//放入数据fmt.Println("writeData",i)}close(intChan)
}
func readData(intChan chan int, exitChan chan bool)  {for{v, ok := <-intChanif !ok{break}fmt.Printf("readData 读到数据=%v\n", v)}exitChan<- trueclose(exitChan)
}func main() {//创建两个管道intChan := make(chan int, 50)exitChan := make(chan bool, 1)go writeData(intChan)go readData(intChan,exitChan)for{_, ok := <-exitChanif !ok{break}}
}

执行结构如下图:

读和写,频率不一样,也没有问题,代码如下:

package mainimport ("fmt""time"
)func writeData(intChan chan int) {for i := 1; i <= 50; i++ {intChan <-i//放入数据fmt.Println("writeData",i)}close(intChan)
}
func readData(intChan chan int, exitChan chan bool)  {for{v, ok := <-intChanif !ok{break}time.Sleep(time.Second)fmt.Printf("readData 读到数据=%v\n", v)}exitChan<- trueclose(exitChan)
}func main() {//创建两个管道intChan := make(chan int, 10)exitChan := make(chan bool, 1)go writeData(intChan)go readData(intChan,exitChan)for{_, ok := <-exitChanif !ok{break}}
}

执行结果如下:

注意:如果只向管道写入数据,而没有读取,就会出现阻塞而deadlock。

Go语言 gorutine和channel协同工作经典应用案例 (Golang经典编程案例)相关推荐

  1. 用Go语言 判断用户输入的年份是不是闰年 (Golang经典编程案例)

    判断一个年份是否是闰年,需要满足下面条件之一: 年份能被4整除,但不能被100整除: 能被400整除 下面用Go语言实现 判断用户输入的年份是不是闰年,代码如下: package mainimport ...

  2. Go语言中 经典的map排序方法及案例 (Golang经典编程案例)

    注意:Golang中的map默认是无序的,每次遍历,得到的输出结果可能不一样. Golang中的map排序: 将map的key放到切片中: 对切片排序: 遍历切片,然后来按key来输出map的值. 案 ...

  3. arcgispython编程案例_ArcGIS Python编程案例(1)-Python语言基础

    Python支持大部分在其他语言中出现的编程结构.在本章内容中,我们将会涉及到许多Python支持的编程结构.我们将会首先介绍如何创建一个新的Python脚本以及如何修改已有脚本.之后我们将深入了解P ...

  4. Go语言的管道Channel用法

    本文实例讲述了Go语言的管道Channel用法.分享给大家供大家参考.具体分析如下: channel 是有类型的管道,可以用 channel 操作符 <- 对其发送或者接收值. ch <- ...

  5. TODO:Go语言goroutine和channel使用

    2019独角兽企业重金招聘Python工程师标准>>> TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(r ...

  6. C语言求最小公倍数和最大公约数三种算法(经典)

    C语言求最小公倍数和最大公约数三种算法(经典) 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为 ...

  7. C语言88案例,经典案例带你绝对入门C编程!

    链接可以下载完整代码和文档[C语言88案例] C语言经典88案例打包下载地址 链接: www.keketec.club/posts/c065dba1/ 案例ex01: 将字符串转换为一个整数 1 题目 ...

  8. Java语言进阶:Channel(通道)

    Java语言进阶:Channel(通道) Channel概述 Channel(通道):Channel是一个接口,可以通过它读取和写入数据, 可以把它看做是IO中的流,不同的是:Channel是双向的, ...

  9. 【数据结构 C语言版】第六篇 栈、队列经典必刷面试考研题

    [数据结构 C语言版]第六篇 栈.队列经典必刷面试考研题 写在前面 更新情况记录: 最近更新时间 更新次数 2022/10/20 1 参考博客与书籍以及链接: (非常感谢这些博主们的文章,将我的一些疑 ...

  10. python编程经典案例-一个非常适合Python新手的编程案例——投票小程序

    想快速入门Python,实战才是捷径. 前面给大家介绍了新手学习Python最重要的一点,就是多动手,多练习,在实战中才能快速进阶.那么通常一个好的实战案例是会让大家的学习事半功倍的.假如你现在刚刚学 ...

最新文章

  1. Docker 部署SpringBoot项目不香吗?
  2. [mybatis]Mapper XML Files_CUD
  3. 【渝粤题库】广东开放大学 互联网营销概论 形成性考核
  4. 循序渐进PYTHON3(十三) --8-- DJANGO之ADMIN
  5. MSSQL-Server On Docker
  6. 吴裕雄 python 机器学习——人工神经网络与原始感知机模型
  7. PHP array(递归)转xml,xml转array
  8. 傅里叶变换性质证明卷积_傅里叶变换2.系统属性和卷积公式的推导
  9. 医药电商平台解决方案
  10. CCS7.2中如何切换烧写RAM和Flash版本程序
  11. Intel Thunderbolt 3 接口介绍
  12. Latex 使用\begin{aligned} 出现 Environment aligned undefined.
  13. 上市公司产权和股权性质-区分非国企、国企和央企(2003-2020)
  14. 计算机小键盘如何启用,教你电脑开机时小键盘自动启用方法
  15. Linux 主机巡检脚本(包含 k8s)
  16. MATLAB中代尔塔的符号,这个符号代表什么意思?还有怎么打?~
  17. HP笔记本win10不能使用U盘,且无安全选项卡解决方法
  18. iOS 通过URL Scheme跳转到常用的App
  19. 长安大学 计算机专业分数线,2018长安大学录取分数线 历年分数线及专业排名
  20. 第1课:BPMN介绍

热门文章

  1. Python 快速搭建文件上传服务器
  2. 推荐几种可以直接翻译PDF英文文献的方法
  3. 为什么程序猿996会猝死,而企业家007却不会?
  4. 坚果pro2刷回官方_锤子坚果Pro2刷魔趣、刷回官方踩坑记
  5. wangeditor光标乱跑,回车换行又返回来问题
  6. 一键获取喜马拉雅音频文件(Python3爬虫)
  7. 八:Webpack的加载器
  8. 2010.5.7 MFC中弹对话框以跟踪和程序运行中修改Static Text的Caption属性
  9. craps赌博游戏的python解法
  10. 2019主流浏览器市场占有率及其内核