美文网首页
Golang中select的用法

Golang中select的用法

作者: DevilRoshan | 来源:发表于2020-03-10 01:04 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:Golang中select的用法

          本文链接:https://www.haomeiwen.com/subject/ttcbdhtx.html