Golang select的使用及典型用法
来源:互联网 发布:万能数据恢复大师6.0 编辑:程序博客网 时间:2024/06/06 09:09
Golang select的使用及典型用法
基本使用
- select是Go中的一个控制结构,类似于switch语句,用于处理异步IO操作。select会监听case语句中channel的读写操作,当case中channel读写操作为非阻塞状态(即能读写)时,将会触发相应的动作。
select中的case语句必须是一个channel操作
select中的default子句总是可运行的。
- 如果有多个case都可以运行,select会随机公平地选出一个执行,其他不会执行。
- 如果没有可运行的case语句,且有default语句,那么就会执行default的动作。
- 如果没有可运行的case语句,且没有default语句,select将阻塞,直到某个case通信可以运行
例如:
package mainimport "fmt"func main() { var c1, c2, c3 chan int var i1, i2 int select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") } }//输出:no communication
典型用法
1.超时判断
//比如在下面的场景中,使用全局resChan来接受response,如果时间超过3S,resChan中还没有数据返回,则第二条case将执行var resChan = make(chan int)// do requestfunc test() { select { case data := <-resChan: doData(data) case <-time.After(time.Second * 3): fmt.Println("request time out") }}func doData(data int) { //...}
2.退出
//主线程(协程)中如下:var shouldQuit=make(chan struct{})fun main(){ { //loop } //...out of the loop select { case <-c.shouldQuit: cleanUp() return default: } //...}//再另外一个协程中,如果运行遇到非法操作或不可处理的错误,就向shouldQuit发送数据通知程序停止运行close(shouldQuit)
3.判断channel是否阻塞
//在某些情况下是存在不希望channel缓存满了的需求的,可以用如下方法判断ch := make (chan int, 5)//...data:=0select {case ch <- data:default: //做相应操作,比如丢弃data。视需求而定}
参考:w3School go select
阅读全文
0 0
- Golang select的使用及典型用法
- golang的select典型用法
- Golang的switch和select用法
- Golang channel select用法
- 【GOLANG】Go语言学习-select用法
- 【GOLANG】Go语言学习-select用法
- 【GOLANG】Go语言学习-select用法
- JDBC的典型用法
- JDBC的典型用法
- JDBC的典型用法
- Golang 学习及使用
- select的使用及缺陷
- 【golang】golang redis 的使用
- golang select
- select golang
- 使用LightningChart的典型行业及应用功能
- StringTokenizer类的典型用法
- composite-element的典型用法
- 前端构建工具 Gulp.js 上手实例
- 从 npm 迁移到 Yarn
- 关于升级swif3.0的一些东西(续)
- C#定义系统常量的两种实现方法对比
- hdu 4135 Co-prime(容斥原理)
- Golang select的使用及典型用法
- HTML5新特性-元素的classList属性与应用
- 侧滑
- 关于使用webView调起微信h5支付的问题
- android settext真机乱码问题
- mmm bionic
- 通达oa破解版|通达oa破解补丁|通达oa补丁下载
- redis的优缺点
- 通过IP查询计算机名