Go语言 gorutine和channel协同工作经典应用案例 (Golang经典编程案例)
案例:
思路分析:
代码实现:
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经典编程案例)相关推荐
- 用Go语言 判断用户输入的年份是不是闰年 (Golang经典编程案例)
判断一个年份是否是闰年,需要满足下面条件之一: 年份能被4整除,但不能被100整除: 能被400整除 下面用Go语言实现 判断用户输入的年份是不是闰年,代码如下: package mainimport ...
- Go语言中 经典的map排序方法及案例 (Golang经典编程案例)
注意:Golang中的map默认是无序的,每次遍历,得到的输出结果可能不一样. Golang中的map排序: 将map的key放到切片中: 对切片排序: 遍历切片,然后来按key来输出map的值. 案 ...
- arcgispython编程案例_ArcGIS Python编程案例(1)-Python语言基础
Python支持大部分在其他语言中出现的编程结构.在本章内容中,我们将会涉及到许多Python支持的编程结构.我们将会首先介绍如何创建一个新的Python脚本以及如何修改已有脚本.之后我们将深入了解P ...
- Go语言的管道Channel用法
本文实例讲述了Go语言的管道Channel用法.分享给大家供大家参考.具体分析如下: channel 是有类型的管道,可以用 channel 操作符 <- 对其发送或者接收值. ch <- ...
- TODO:Go语言goroutine和channel使用
2019独角兽企业重金招聘Python工程师标准>>> TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(r ...
- C语言求最小公倍数和最大公约数三种算法(经典)
C语言求最小公倍数和最大公约数三种算法(经典) 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为 ...
- C语言88案例,经典案例带你绝对入门C编程!
链接可以下载完整代码和文档[C语言88案例] C语言经典88案例打包下载地址 链接: www.keketec.club/posts/c065dba1/ 案例ex01: 将字符串转换为一个整数 1 题目 ...
- Java语言进阶:Channel(通道)
Java语言进阶:Channel(通道) Channel概述 Channel(通道):Channel是一个接口,可以通过它读取和写入数据, 可以把它看做是IO中的流,不同的是:Channel是双向的, ...
- 【数据结构 C语言版】第六篇 栈、队列经典必刷面试考研题
[数据结构 C语言版]第六篇 栈.队列经典必刷面试考研题 写在前面 更新情况记录: 最近更新时间 更新次数 2022/10/20 1 参考博客与书籍以及链接: (非常感谢这些博主们的文章,将我的一些疑 ...
- python编程经典案例-一个非常适合Python新手的编程案例——投票小程序
想快速入门Python,实战才是捷径. 前面给大家介绍了新手学习Python最重要的一点,就是多动手,多练习,在实战中才能快速进阶.那么通常一个好的实战案例是会让大家的学习事半功倍的.假如你现在刚刚学 ...
最新文章
- Docker 部署SpringBoot项目不香吗?
- [mybatis]Mapper XML Files_CUD
- 【渝粤题库】广东开放大学 互联网营销概论 形成性考核
- 循序渐进PYTHON3(十三) --8-- DJANGO之ADMIN
- MSSQL-Server On Docker
- 吴裕雄 python 机器学习——人工神经网络与原始感知机模型
- PHP array(递归)转xml,xml转array
- 傅里叶变换性质证明卷积_傅里叶变换2.系统属性和卷积公式的推导
- 医药电商平台解决方案
- CCS7.2中如何切换烧写RAM和Flash版本程序
- Intel Thunderbolt 3 接口介绍
- Latex 使用\begin{aligned} 出现 Environment aligned undefined.
- 上市公司产权和股权性质-区分非国企、国企和央企(2003-2020)
- 计算机小键盘如何启用,教你电脑开机时小键盘自动启用方法
- Linux 主机巡检脚本(包含 k8s)
- MATLAB中代尔塔的符号,这个符号代表什么意思?还有怎么打?~
- HP笔记本win10不能使用U盘,且无安全选项卡解决方法
- iOS 通过URL Scheme跳转到常用的App
- 长安大学 计算机专业分数线,2018长安大学录取分数线 历年分数线及专业排名
- 第1课:BPMN介绍