案例:

思路分析:

代码实现:

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. SFB 项目经验-37-分配公网证书 For SFB 2015-持久聊天服务器(图解)
  2. 卓越软件工程--《微软360度》读后感
  3. Nginx+Tomcat负载均衡访问网页出现报错HTTP Status 400 – 错误的请求
  4. 都已经十岁的ApacheDubbo,还能再乘风破浪吗?
  5. 英特尔再爆重大芯片漏洞,苹果谷歌微软相继中招!
  6. 端口冲突,可爱的8080
  7. 案例 -- web移动端项目(vue)
  8. android 安装p12证书,如何在Android中使用p12证书(客户端证书)
  9. LDA-线性判别分析
  10. NoteExpress样式制作手册
  11. java uclinux_Java在基于uclinux的嵌入式系统中的应用
  12. Just For Fun
  13. [springboot 开发单体web shop] 1. 前言介绍和环境搭建
  14. 易飞9安装和授权视频
  15. Java CompletableFuture.runAfterEither任何一个完成就执行Runnable
  16. 移动App专项性能测试(Android and iOS)
  17. PYthon将图片合成视频方法一:OpenCV
  18. Kaggle上的狗品种识别(ImageNet Dogs)
  19. 使用 vue-direction-key 快速切换 input 的焦点 focus
  20. 学习黑盒优化算法CMA和RandomSearch,借助阿里达摩院MindOpt的RABBO榜单【系列2/4】

热门文章

  1. Google Analytics中的基本度量四 “页面停留时间和网站停留时间
  2. reactnative布局与适配
  3. Redis-使用redis-trib构建集群
  4. 搜狗站长平台多线程推送工具【免码-免VPS】
  5. 2021腾讯广告算法大赛联手ACM MM,共百万奖金池!
  6. 英文pdf翻译为中文(word+google浏览器即可)
  7. 到底买苹果XS还是XR_iPhone XS 和 XR 买哪个?10 个理由告诉你 XS 更好,贵是有原因的...
  8. 可调稳压电源lm317实验报告_LM317可调稳压电源
  9. python处理页眉_【python-docx 05】操作页眉和页脚
  10. 数据结构笔记【全-408统考】【附思维导图】