语法: select case
select case多和for的死循环连用
// 在多个管道中只要有一个操作成功,就执行相应的逻辑
channelA:=make(chan int)
channelB:=make(chan int)
go func(){
time.Sleep(3*time.Second)
channelA<-1
}()
select {
case <-channelA: // 也可以直接给变量赋值,如 v,ok:=<-channelA
fmt.Println("a")
case <-channelB:
fmt.Println("b")
default:
fmt.Println("default")
}
time.sleep(10*time.Second)
当有满足条件的channel时就会执行这个channel
当管道有close的时候
// 在多个管道中只要有一个操作成功,就执行相应的逻辑
channelA:=make(chan int)
channelB:=make(chan int)
go func(){
time.Sleep(3*time.Second)
channelA<-1
close(channelA) //这里关闭管道
}()
<-channelA
select {
case v,ok:=<-channelA:
fmt.Println(v,ok)
case <-channelB:
fmt.Println("b")
default:
fmt.Println("default")
}
time.sleep(10*time.Second)
以上结果为v=0 ,ok=false,管道关闭依然是可以获取到值的
文档更新时间: 2021-08-22 12:41 作者:张尚