zoukankan      html  css  js  c++  java
  • go-select

    select语句属于条件分支流程控制方法,不过它只能用于通道。
    select语句中的case关键字只能后跟用于通道的发送操作的表达式以及接收操作的表达式或语句。
    ch1 := make(chan int, 1)
    ch2 := make(chan int, 1)
    select {
     case e1 := <-ch1:
        fmt.Printf("1th case is selected. e1=%v.
    ", e1)
     case e2 := <-ch2:
        fmt.Printf("2th case is selected. e2=%v.
    ", e2)
     default:
        fmt.Println("No data!")
    } 
    如果该select语句被执行时,通道ch1和ch2中都没有任何数据,那么肯定只有default case会被执行。
    只要有一个通道在当时有数据就不会执行default。
    如果在当时有数据的通道多于一个,那么Go语言会通过一种伪随机的算法来决定哪一个case将被执行。
    如果一条select语句中不存在default case, 并且在被执行时其中的所有case都不满足执行条件,那么它的执行将会被阻塞!
    当前流程的进行也会因此而停滞。直到其中一个case满足了执行条件,执行才会继续。
    未被初始化的通道会使操作它的case永远满足不了执行条件。对于针对它的发送操作和接收操作来说都是如此。
    break语句也可以被包含在select语句中的case语句中。
    它的作用是立即结束当前的select语句的执行,不论其所属的case语句中是否还有未被执行的语句。
    close(ch3) 关闭通道
  • 相关阅读:
    图解机器学习读书笔记-CH3
    塑造职场影响力的五大法宝
    怎样培养独挡一面的能力
    数据结构
    [分享]恼人的设计模式
    Git使用总结
    设计师整理的系统开发流程-简洁又有重点
    JavaScript中的String对象
    python高效解析日志入库
    如何让js不产生冲突,避免全局变量的泛滥,合理运用命名空间
  • 原文地址:https://www.cnblogs.com/osbreak/p/10401800.html
Copyright © 2011-2022 走看看