当前位置: 首页 > news >正文

go里面select使用


/**
Go里面提供了一个关键字select,通过select可以监听channel上的数据流动。
select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。
与switch语句相比, select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,大致的结构如下:


在一个select语句中,Go语言会按顺序从头至尾评估每一个发送和接收的语句。
如果其中的任意一语句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句中任意选择一条来使用。
如果没有任意一条语句可以执行(即所有的通道都被阻塞),那么有两种可能的情况:
如果给出了default语句,那么就会执行default语句,同时程序的执行会从select语句后的语句中恢复。
如果没有default语句,那么select语句将被阻塞,直到至少有一个通信可以进行下去。


有时候会出现goroutine阻塞的情况,那么我们如何避免整个程序进入阻塞的情况呢?
我们可以利用select来设置超时,通过如下的方式实现:
 */

//超时
func main()  {
	c:=make(chan int)
	o:=make(chan bool)
	go func() {
		for  {
			select {
			case v:=<-c:
				fmt.Println(v)
			case <-time.After(5*time.Second):
				fmt.Println("timeout")
				o<-true
				break
			}
		}
	}()
	//c<-666 // 注释掉,引发 timeout
	<-o
}

 

相关文章:

  • golang以打印机为例 互斥锁的问题 使用channel解决
  • 几道面试题
  • golang读写锁简单例子
  • 急问数据结构用c c++描述的区别?
  • golang条件变量的作用并不保证在同一时刻仅有一个协程(线程)访问某个共享的数据资源
  • 华为面试题3
  • golang多个消费者访问共享数据
  • 创建第一个区块001
  • c语言常见出错信息(转)
  • 创建我的第一个区块链002
  • 几种开发工具的特性比较(转载)
  • 添加区块到区块链当中003
  • 很难见得到的一篇关于windows进程的说明书(转载)
  • 补充区块代码更新函数004
  • byte二位数组转换问题005
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【RocksDB】TransactionDB源码分析
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Angular 响应式表单之下拉框
  • AWS实战 - 利用IAM对S3做访问控制
  • css的样式优先级
  • JavaScript服务器推送技术之 WebSocket
  • Java应用性能调优
  • Median of Two Sorted Arrays
  • MySQL主从复制读写分离及奇怪的问题
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 前端js -- this指向总结。
  • 容器服务kubernetes弹性伸缩高级用法
  • 我有几个粽子,和一个故事
  • 物联网链路协议
  • - 转 Ext2.0 form使用实例
  • 湖北分布式智能数据采集方法有哪些?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # Java NIO(一)FileChannel
  • # 透过事物看本质的能力怎么培养?
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (11)MSP430F5529 定时器B
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二十三)Flask之高频面试点
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (三)uboot源码分析
  • .apk文件,IIS不支持下载解决
  • @Bean注解详解
  • [ 数据结构 - C++]红黑树RBTree
  • [.net] 如何在mail的加入正文显示图片
  • [20171101]rman to destination.txt
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [bzoj4240] 有趣的家庭菜园
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测