当前第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不阻塞吗的详细内容,更多文章请关注木庄网络博客!!
返回前面的内容
相关阅读 >>
go微服务入门到容器化实践,落地可观测的微服务电商项目
通过 wasmedge 嵌入webassembly 函数扩展 golang 应用
golang 协程(goroutine) 运行过程 与 并发
golang入门三:类型
写在 dubbo go 的第五个年头
windows下如何玩转火热的go-zero
go设计模式之单例模式浅谈
游戏服务器框架gonet
golang- go语言学习笔记之定义变量
golang在kubernetes语境下的编程范式
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang select不阻塞吗