package mainimport ("fmt""time"
)func main() {myCh1  := make(chan int)myCh2  :=make(chan int)finish1  :=make(chan bool)finish2  :=make(chan bool)go func() {fmt.Println("生产者1")time.Sleep(time.Second)fmt.Println("生产者11")for i := 0; i < 10 ; i++ {myCh1<-ifmt.Println("生产者1生产了", i)}finish1 <- true//close(myCh1)}()go func() {time.Sleep(time.Second)for i := 0; i < 10 ; i++ {myCh2<-ifmt.Println("生产者2生产了", i)}finish2 <- true//close(myCh2)}()var f1=falsevar f2=falsefor{if f1 && f2{fmt.Println("等待结束")break}select {case  num1, ok :=<-myCh1:if ok{fmt.Println("------消费者消费了myCh1", num1)}else{fmt.Println("------消费者消费了myCh1==", num1)time.Sleep(time.Second*1)}case num2, ok := <-myCh2:if ok{fmt.Println("------消费者消费了myCh2", num2)}else{fmt.Println("------消费者消费了myCh2==", num2)time.Sleep(time.Second*1)}case f1 = <- finish1:fmt.Println("------消费者1结束")case f2 = <- finish2:fmt.Println("------消费者2结束")case <-time.After(time.Second *5):fmt.Println("超时了")return}time.Sleep(time.Millisecond)}fmt.Println("程序结束了")
}

go语言学习,channel消费者和生产者相关推荐

  1. GO语言学习笔记之channel

    channel 定义:channel是Go语言中的一个核心数据类型,可以将它看为管道或队列(FIFO).并发核心单元通过它就可以发送或者接受数据进行通讯,这在一定程度上又进一步降低了编程的难度. 目的 ...

  2. go语言学习:语言简介

    一.Go语言简介 Go语言(或 Golang) 起源于 2007 年,并在 2009 年正式对外发布.Go 是非常年轻的一门语言,它的主要目标是"兼具 Python 等动态语言的开发速度和 ...

  3. golang-阅读雨痕大神的Go语言学习笔记的心得

    golang-阅读雨痕大神的Go语言学习笔记的心得 第一章 概述 1.1 go与java中的局部变量初始化问题 1.2 golang中实现生产者消费者模型,利用管道进行数据通信 第二章 类型 2.1 ...

  4. Go语言的Channel文章,整个人都感觉不好了

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. Go的Channel是一个很强大的并发数据模型,在一个发送者和多个消费者情况下工作得最好,但是如果是多个发送者,那么在C ...

  5. Go语言学习资料整理

    整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build-web- ...

  6. 【原创】modb 功能设计之“支持多消费者单生产者”

    2019独角兽企业重金招聘Python工程师标准>>> 在< modb 开发之需求和总体设计 >中,第一个要实现的功能点就是 "支持多消费者单生产者" ...

  7. Go 语言学习总结(4)—— 为什么说 Golang 是面向未来的语言?

    前言 Golang 是最年轻的编程语言之一,于 2007 年设计,由 Ken Thompson(UNIX 和 C 的设计者和创建者).Rob Pike(UTF 8 和 UNIX 格式的共同创建者)和 ...

  8. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  9. Go语言学习之路(二)

    Go语言学习之路(二) 面对对象编程思想 抽象 封装 继承 接口 文件 命令行参数 Json 序列化 反序列化(unmarshal) 单元测试 Redis Redis简介 Redis基本使用 Go连接 ...

最新文章

  1. java 中map的优点_java 中map遍历的四种方法和优缺点
  2. python 分类变量xgboost_如何用XGBoost做时间序列预测?
  3. LeetCode——数学
  4. 图解WildFly8之Servlet容器Undertow剖析
  5. Linux minilogd占用内存过高及开机启动项修改
  6. java键盘输入到文件中_在Linux中使用java和javac命令编译运行java文件
  7. python PEP 487
  8. 小米8ios图标包下载_小米手机中这么实用的隐藏功能,知道的人居然那么少?真可惜...
  9. CJ20N被删除物料的历史记录
  10. 推荐几个漂亮实用的JS菜单
  11. Qt 子窗体嵌入父窗体
  12. 清华大学操作系统OS学习(五)——物理内存管理:非连续内存分配
  13. oracle 监听报错,Oracle启动监听报错:The listener supports no services解决
  14. DB2数据库中用户和Schema的概念与理解
  15. Hive基础教程 Hive入门
  16. Error: Duplicate resources
  17. ResponseEntity返回图片,下载图片
  18. 写给大学男同胞的几条择偶建议
  19. linux 字幕制作工具,Aegisub下载、安装和使用:Ubuntu字幕编辑软件
  20. 封装R0805跟R0603贴片电阻有什么区别?

热门文章

  1. 一个专业处理字符串的IDEA插件
  2. 群友:事务中的异常不也抛出了,为什么没catch到而回滚?
  3. 这个类库可以帮助你理解Java中的函数式编程
  4. SQL 语句中 left join 后用 on 还是 where,区别大了!
  5. 2021 年4月数据库流行度排行榜出炉!Snowflake 和 Clickhouse上升迅速!
  6. 如何使用GitHub Action自动发布JAR到Maven仓库
  7. Spring 中 @Component、@Service 等注解如何被解析?
  8. 深度剖析RabbitMQ可靠性消息投递以及实践方案
  9. GitHub 热榜:文字识别神器,超轻量级中文 OCR!
  10. Spring Boot 2.x基础教程:使用 ECharts 绘制各种华丽的数据图表