//每次使用一个满足条件的情况进行运算,如果存在两个以上的情况,随机选择一个执行计算//select这个关键字比较有趣,他不会进行即时的判断,而是允许等待,如果等待能获取判断值,就选取能获取到的判断值//当然,如果设置了default,那么不允许任何等待时间,因为default的优先级极高,因为default不耗时间= =
package mainimport ("fmt""math/rand""time"
)func generator() chan int {out := make(chan int)go func() {i := 0for {time.Sleep(time.Duration(rand.Intn(1500)) * time.Millisecond)out <- ii++}}()return out
}func main() {//var c1, c2 chan int //c1,c2 = nilvar c1, c2 = generator(), generator()w := createWorker(0)n := 0var values []int //使用缓存来储存未能及时消耗的数据tm := time.After(10 * time.Second)temp := 0tick := time.Tick(1 * time.Second)for {temp++var activeWorker chan<- intvar activeValue intif len(values) > 0 {activeWorker = wactiveValue = values[0]}select {case <-time.After(800 * time.Millisecond):fmt.Println("time out", temp)case n = <-c1://fmt.Println("from c1")values = append(values, n)case n = <-c2://fmt.Println("from c2")values = append(values, n)case <-tick:fmt.Println("queue len=", len(values))case activeWorker <- activeValue:values = values[1:]case <-tm:fmt.Println("bye")return//default://fmt.Println("index:", temp)}}
}func worker(id int, c chan int) {for n := range c {time.Sleep(1 * time.Second)fmt.Printf("Worker %d received %d\n", id, n)}
}func createWorker(id int) chan<- int {c := make(chan int)go worker(id, c)return c
}

go语言学习(6)select的使用相关推荐

  1. MySQL基础——DML语言学习\插入数据\删除数据\更新数据

    接上篇文章 MySQL基础--DDL语言学习 DML语言学习 Data Manipulation Language 数据操纵语言 主要包括表记录的插入(INSERT).更新(UPDATE).删除(DE ...

  2. MySQL基础——DDL语言学习\数据库的建立\MySQL数据类型\MySQL常见约束\表的增删改

    接上篇文章 MySQL基础--数据库和SQL概述\MySQL基本使用\DQL语言学习 DDL语言学习 Data Definition Language 数据定义语言 主要用于数据库和数据表的管理和操作 ...

  3. MySQL基础——数据库和SQL概述\MySQL基本使用\DQL语言学习\条件查询\排序查询\常见函数\分组查询\连接查询\子查询\分页查询\联合查询

    本文详细讲解了MySQL中DQL语言,也就是数据查询语句的使用.全文3w余字,是对学习MySQL知识的整理总结,因为篇幅较长,MySQL基础知识余下部分发表在余下博客中 DML语言学习\插入数据\删除 ...

  4. go语言学习初探(二)基础语法

    变量声明 var v1 int var v2 string var v3 [10]int var v4 []int var v5 struct {f int } var v6 *int var v7 ...

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

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

  6. c++扫雷游戏代码_C语言学习教程,用C语言编写扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...

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

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

  8. 实训项目——多语言学习app 总结报告

    文章目录 实训项目--多语言学习app 总结报告 1. app 介绍 1. 运行app 2. 界面效果 2. 开发过程 1. 开发环境 2. 项目结构 3. 欢迎界面 4. 用户与学习界面 5. 语言 ...

  9. 【Go语言 · 学习笔记】

    文章目录 Go语言 · 学习笔记 一.Go包管理 1. 什么是Go语言中的包 2. 包的命名 3. main包 4. 导入包 5. 远程包导入 6. 命名导入 7. 包的init函数 二.Go开发工具 ...

  10. 当当网 R 语言学习资料统计分析

    当当网 R 语言学习资料统计分析 一.网络数据的抓取 二.数据清洗与保存 (一)工作目录的修改 (二)导入数据并修改列名 1. 交互式编辑器 2. names()函数 3. rename()函数 (三 ...

最新文章

  1. 程序员弃码投中医?还做成了不错的生意! | 极客视频
  2. jsp里面编写java代码注意加双引号
  3. 编程语言对比 字面常量
  4. 零基础、非计算机相关专业的如何转型程序员
  5. MongnDB 主从复制
  6. 计算机等级考试二级要学PS,关于计算机等级考试题库你所不知道的那些一级PS操作题...
  7. 怎么看蛋白质编码序列_墨鱼的“墨汁”可以吃吗,它有什么营养?看完就明白,涨知识了...
  8. 五大开源MySQL管理工具!
  9. 关于VS2008的Web创作组件安装错误
  10. Java编一个收银小票_Java编程打印购物小票实现代码
  11. android webview打开pdf文件
  12. 使用Hexo + Gitee Pages搭建个人博客
  13. 2018云计算行业现状及2020年云计算发展趋势
  14. uni-app实现一键登录
  15. 汽车零件分型面的构建思路之补孔技巧
  16. 发挥数字化平台优势,电子元器件采购商城系统助力企业改变固有低效流程
  17. error: %preun(mysql-community-server-5.7.36-1.el6.x86_64) scriptlet failed
  18. XML解析器列表(超全!)
  19. [Swift]LeetCode1135. 最低成本联通所有城市 | Connecting Cities With Minimum Cost
  20. java实现用户权限模块两种方法

热门文章

  1. grep查找时,去掉grep本身那一条
  2. php pdo 方法,PHP使用PDO修改数据的方法
  3. java中的main的介绍_Java中的main函数详细讲解
  4. python2中的unicode_在python2中的编码
  5. 空气培养皿采样后保存_环境监测基础知识——环境空气监测技术之布点采样
  6. 一棵树的生成树有几颗_次小生成树(树剖,生成树)
  7. mysql命令行的光标不显示和git-bash不能直接使用mysql登录的问题
  8. python【数据结构与算法】分治算法之大整数乘法
  9. python【力扣LeetCode算法题库】121-买卖股票的最佳时机
  10. 算法提高 c++_ch04_02_修正版