当前第2页 返回上一页
基本用法
1 2 3 4 5 6 7 8 | //select基本用法
select {
case <- chan1:
// 如果chan1成功读到数据,则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据,则进行该case处理语句
default:
// 如果上面都没有成功,则进入default处理流程
|
如果有一个或多个IO操作可以完成,则Go运行时系统会随机的选择一个执行,否则的话,如果有default分支,则执行default分支语句,如果连default都没有,则select语句会一直阻塞,直到至少有一个IO操作可以进行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | start := time.Now()
c := make(chan interface{})
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
time.Sleep(4*time.Second)
close(c)
}()
go func() {
time.Sleep(3*time.Second)
ch1 <- 3
}()
go func() {
time.Sleep(3*time.Second)
ch2 <- 5
}()
fmt.Println("Blocking on read...")
select {
case <- c:
fmt.Printf("Unblocked %v later.\n", time.Since(start))
case <- ch1:
fmt.Printf("ch1 case...")
case <- ch2:
fmt.Printf("ch1 case...")
default:
fmt.Printf("default go...")
}
|
运行上述代码,由于当前时间还未到3s。所以,目前程序会走default。
以上就是golang select不阻塞吗的详细内容,更多文章请关注木庄网络博客!!
返回前面的内容
相关阅读 >>
【gocn酷go推荐】goroutine 泄漏防治神器 goleak
手撸golang 行为型设计模式 模板方法模式
聊聊storagetapper的server
搭建vscode golang开发环境
聊聊loki的query
golang leaf用的多吗
golang开发工程师是做什么的
go语言学习6-字典类型
golang byte是什么
【gocn酷go推荐】go程序配置利器-viper库
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang select不阻塞吗