go语言学习,channel消费者和生产者
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消费者和生产者相关推荐
- GO语言学习笔记之channel
channel 定义:channel是Go语言中的一个核心数据类型,可以将它看为管道或队列(FIFO).并发核心单元通过它就可以发送或者接受数据进行通讯,这在一定程度上又进一步降低了编程的难度. 目的 ...
- go语言学习:语言简介
一.Go语言简介 Go语言(或 Golang) 起源于 2007 年,并在 2009 年正式对外发布.Go 是非常年轻的一门语言,它的主要目标是"兼具 Python 等动态语言的开发速度和 ...
- golang-阅读雨痕大神的Go语言学习笔记的心得
golang-阅读雨痕大神的Go语言学习笔记的心得 第一章 概述 1.1 go与java中的局部变量初始化问题 1.2 golang中实现生产者消费者模型,利用管道进行数据通信 第二章 类型 2.1 ...
- Go语言的Channel文章,整个人都感觉不好了
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. Go的Channel是一个很强大的并发数据模型,在一个发送者和多个消费者情况下工作得最好,但是如果是多个发送者,那么在C ...
- Go语言学习资料整理
整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build-web- ...
- 【原创】modb 功能设计之“支持多消费者单生产者”
2019独角兽企业重金招聘Python工程师标准>>> 在< modb 开发之需求和总体设计 >中,第一个要实现的功能点就是 "支持多消费者单生产者" ...
- Go 语言学习总结(4)—— 为什么说 Golang 是面向未来的语言?
前言 Golang 是最年轻的编程语言之一,于 2007 年设计,由 Ken Thompson(UNIX 和 C 的设计者和创建者).Rob Pike(UTF 8 和 UNIX 格式的共同创建者)和 ...
- go get 拉取指定版本_go语言学习笔记-基础知识-3
相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...
- Go语言学习之路(二)
Go语言学习之路(二) 面对对象编程思想 抽象 封装 继承 接口 文件 命令行参数 Json 序列化 反序列化(unmarshal) 单元测试 Redis Redis简介 Redis基本使用 Go连接 ...
最新文章
- java 中map的优点_java 中map遍历的四种方法和优缺点
- python 分类变量xgboost_如何用XGBoost做时间序列预测?
- LeetCode——数学
- 图解WildFly8之Servlet容器Undertow剖析
- Linux minilogd占用内存过高及开机启动项修改
- java键盘输入到文件中_在Linux中使用java和javac命令编译运行java文件
- python PEP 487
- 小米8ios图标包下载_小米手机中这么实用的隐藏功能,知道的人居然那么少?真可惜...
- CJ20N被删除物料的历史记录
- 推荐几个漂亮实用的JS菜单
- Qt 子窗体嵌入父窗体
- 清华大学操作系统OS学习(五)——物理内存管理:非连续内存分配
- oracle 监听报错,Oracle启动监听报错:The listener supports no services解决
- DB2数据库中用户和Schema的概念与理解
- Hive基础教程 Hive入门
- Error: Duplicate resources
- ResponseEntity返回图片,下载图片
- 写给大学男同胞的几条择偶建议
- linux 字幕制作工具,Aegisub下载、安装和使用:Ubuntu字幕编辑软件
- 封装R0805跟R0603贴片电阻有什么区别?
热门文章
- 一个专业处理字符串的IDEA插件
- 群友:事务中的异常不也抛出了,为什么没catch到而回滚?
- 这个类库可以帮助你理解Java中的函数式编程
- SQL 语句中 left join 后用 on 还是 where,区别大了!
- 2021 年4月数据库流行度排行榜出炉!Snowflake 和 Clickhouse上升迅速!
- 如何使用GitHub Action自动发布JAR到Maven仓库
- Spring 中 @Component、@Service 等注解如何被解析?
- 深度剖析RabbitMQ可靠性消息投递以及实践方案
- GitHub 热榜:文字识别神器,超轻量级中文 OCR!
- Spring Boot 2.x基础教程:使用 ECharts 绘制各种华丽的数据图表