美文网首页golang成长记
golang select 小结

golang select 小结

作者: Tim_SSS | 来源:发表于2018-11-12 17:41 被阅读0次

    select 介绍

    从不同并发执行的协程中,获取数据可以用select来完成。select监听的多个通道,也可以用通道发送数值。

    select {
    // 接收数据
    case u:= <- ch1:
            ...
    // 发送数据
    case v:= <- ch2:
            ...
            ...
    default: // no value ready to be received
            ...
    }
    

    select 基本用法

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

    示例1

    package main
    
    import (
        "time"
        "fmt"
    )
    
    func doneSelect(ch chan int)  {
        for  {
            fmt.Println("for循环-输出-start")
            select {
            case data := <-ch:
                fmt.Println(data)
                break // 使用break只会跳出select
                //return   使用return会跳出for循环
            default:
                fmt.Println("select default testing")
            }
            fmt.Println("for循环-结束-end")
        }
        fmt.Println("for循环-跳出-end")
    }
    func do()  {
        ch := make(chan int)
        go doneSelect(ch)
        ch <- 666
    }
    func main()  {
        do()
        time.Sleep(3*time.Second)
    }
    

    相关文章

      网友评论

        本文标题:golang select 小结

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