Golang中select的用法

2020-03-10  本文已影响0人  DevilRoshan

select介绍

从不同并发执行的协程中,获取数据可以用select来完成。select监听的多个通道,也可以用通道发送数值。
select的使用类似于switch语句,它有一系列case分支和一个默认的分支。每个case会对应一个通道的通信(接收或发送)过程。select会一直等待,直到某个case的通信操作完成时,就会执行case分支对应的语句。具体格式如下:

select{
    case <-ch1:
        ...
    case data := <-ch2:
        ...
    case ch3<-data:
        ...
    default:
        默认操作
}

select的基本用法

  1. 如果多个通道都阻塞了,会等待知道其中一个通道可以处理。
  2. 如果多个通道都可以处理,随机选取一个处理。
  3. 如果没有通道操作可以操作并且写了default语句,会执行:default(永远是可以运行的)
  4. 如果防止select堵塞,可以写default来确保发送不被堵塞,没有case的select就会一直堵塞。
  5. 当select做选择case和default操作时,case的优先级大于default。
  6. select语句实现了一种监听模式,通常在无限循环中使用,通过在某种情况下,通过break退出循环。

举个小例子来演示下select的使用:

func main() {
    ch := make(chan int, 1)
    for i := 0; i < 10; i++ {
        select {
        case x := <-ch:
            fmt.Println(x)
        case ch <- i:
        }
    }
}
0
2
4
6
8
上一篇 下一篇

猜你喜欢

热点阅读