Go 关键字 Select
- 一、Select
- 二、超时控制
- 三、break关键字结束select
一、Select
select 是Go语言中常用的一个关键字,Linux再也早也引入了这个函数,用来实现非阻塞的一种方式,一个select语句用来选择哪个case中的发送或接收操作可以被立即执行。它类似于switch语句,但是它的case涉及到channel有关的I/O操作。
select{case <-chan1:// 如果成功读取到chan1中得数据,则进行该case处理语句
case chan2 <- value:// 如果成功向chan2中写入数据,则进行该case处理语句
default:// 如果上面都没有成功,则进入default处理语句
}
简单案例:
func main(){ch := make(chan int)go func(){ch <- 10}()time.Sleep(time.Second)select{case <- ch:fmt.Println("come to read channel")default:fmt.Println("come to default")}
}
二、超时控制
如果所有的case都没有成功,且没有default语句存在时,select语句会一直阻塞,知道至少有一个I/O操作进行,但如果没有,就会一直阻塞,这时我们就可以设置一个超时控制。
- 1、实现方法一,使用协程:
func main(){timeout := make(chan bool)ch := make(chan string)go func(ch chan bool){time.Sleep(time.Second * 2)ch <- true}(timeout)select {case value := <-ch:fmt.Printf("value is %v",value)case <= timeout: fmt.Println("runing timeout...")}fmt.Println("end this demo")
}
输出结果
runing timeout...
end this demo
- 2、实现方法二,使用time.After()方法实现:
func main(){ch := make(chan string)select {case value := <-ch:fmt.Printf("value is %v",value)case <= time.After(time.Second): fmt.Println("runing timeout...")}fmt.Println("end this demo")
}
输出结果:
runing timeout...
end this demo
三、break关键字结束select
案例
func main(){ch1 := make(chan int,1)ch2 := make(chan int,1)select{case ch1 <- 10:fmt.Println("this is ch1")breakfmt.Println("ch1 write value")case ch2 <-20:fmt.Println("this is ch2")fmt.Println("ch2 write value")}
}
上述代码中,ch1和ch2两个通道都可以写入值,所以系统会随机选择一个case执行,发现先择执行ch1的case时,由于又break关键字的存在,所以只会打印一句:
this is ch1
但执行ch2的case时,所有内容都会被打印:
this is ch2
ch2 write value
Go 关键字 Select相关推荐
- SQLserver关键字select into 用法
基于现存表创建新表新表 select into 语句 语法 select select_list into new_table_name from old_table_name ...
- Selenium2Library库中没有系统关键字select window by handle咋办?
- mysql分页关键词_数据库分页关键字
Mysql分页采用limt关键字 select * from t_order limit 5,10; #返回第6-15行数据 select * from t_order limit 5; #返回前 ...
- golang中的select详解
注意 监听的case中,没有满足条件的就阻塞 多个满足条件的就任选一个执行 select本身不带循环,需要外层的for default通常不用,会产生忙轮询 break只能跳出select中的一个ca ...
- MySQL SELECT:数据表查询语句
MySQL 表单查询是指从一张表的数据中查询所需的数据,主要有查询所有字段.查询指定字段.查询指定记录.查询空值.多条件的查询.对查询结果进行排序等. MySQL SELECT 基本语法 MySQL ...
- 1、SELECT:数据表查询语句
在 MySQL 中,可以使用 SELECT 语句来查询数据.查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高.最重要的操作. SELECT 的语法格式如下: SELE ...
- Oracle rollup 关键字用法简介.
1. 什么是Rollup 在PL/sql 中, Rollup 这个关键字通常用于select 语句的 group by 后面. 在group by 后面使用rollup关键字, select语句就 ...
- SQL select查询原理--查询语句执行原则转
1.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 1)简单的单表查询 SELECT 字段 FROM ...
- T-SQL with关键字
T-SQL with关键字 Select字句在逻辑上是SQL语句最后进行处理的最后一步,所以,以下查询会发生错误: SELECTYEAR(OrderDate) AS OrderYear,COUNT(D ...
- mysql中select 的题型_MYSQL经典题型详情解析
学完了mysql后发现有很多地方不是很明白,于是总结了mysql的经典题型,不论是工作还是面试,我相信还是有一定帮助的. 例题一 在我的数据库中数据如下(排序有些差别,但是不影响结果) 分析: ...
最新文章
- WTL中CMemDC与CDC、CDCHandle的联系
- 小鸭脖大生意——绝味鸭脖背后的故事
- 【已解决】R语言添加行、列,转置操作
- 【情人节表白代码】——情人节将至,10余款浪漫爱心特效送给你爱的那个她
- rstudio的数据集怎么建立和保存_这个40M的小工具助你在windows下处理数据如虎添翼...
- hadoop服务快速部署
- oracle数据库无法写入文件,如何在ORACLE的PL/SQL中将数据写入文件
- Simpy学习:基本运行与终止(一)
- Windows2008管理---第12章 终端服务器
- 虚拟化不会增加安全复杂性
- node.js入门及安装
- 服务器密码过期了咋修改,重置已过期的密码 (Sun Java System Directory Server Enterprise Edition 6.3 管理指南)...
- VC2005工程常用设置系统环境变量设置
- raid0 trim linux,6系主板泪流满面,终于支持RAID 0模式下的TRIM了
- 《 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失》
- java int相除向上取整_JAVA入门第一季学习补充 - 何以解忧?
- python scipy.optimize 非线性规划 求解局部最优和全局最优
- mysql_check_MySQL中check的用法
- 不要拿项目做毕业设计
- 好看又炫酷的网页特效例子收集
热门文章
- react 怎么获取表格_React之表格操作
- 全国多年平均相对湿度空间分布数据
- 南华大学ACM队2021年7.14训练赛题解
- NYOJ题目1057-寻找最大数(三)
- 连接定义点作用_【干货】我的期货交易入场点分析
- inno setup安装之前关闭mysql_inno setup 安装前判断进程是否存在,以及停止相应进程转...
- md5算出来不一样_西安美发培训学校:为什么我看到的色卡上的颜色和染出来的颜色会不一样呢?...
- 电脑配置知识_高品质全铝迷你电脑主机推荐 适合家用/办公/游戏的锐龙APU电脑配置...
- 用 IIS 进行ASP.NET 成员/角色管理(1):安全和配置概述
- 对当今流行的比赛评分系统的简单分类以及《评委计分系统-双屏版》的类别