select 是 Go 中的一个控制结构。select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

select语句的语法结构和switch语句很相似,也有case语句和default语句:

 select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}

说明:

  • 每个case都必须是一个通信

  • 所有channel表达式都会被求值

  • 所有被发送的表达式都会被求值

  • 如果有多个case都可以运行,select会随机公平地选出一个执行。其他不会执行。

  • 否则:

    如果有default子句,则执行该语句。

    如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。

package main

import (
"fmt"
"time"
) func main() {
/*
分支语句:if,switch,select
select语句类型于switch语句
但是select语句会随机执行一个可运行的case
如果没有case可以运行,要看是否有default,如果有就执行default,否则就进入阻塞,直到有case可以运行
*/
ch1 := make(chan int)
ch2 := make(chan int) go func() {
time.Sleep(3 * time.Second)
ch1 <- 100
}() go func() {
time.Sleep(3 * time.Second)
ch2 <- 200
}() select {
case num1 := <-ch1:
fmt.Println("ch1中获取的数据。。", num1)
case num2, ok := <-ch2:
if ok {
fmt.Println("ch2中读取的数据。。", num2)
} else {
fmt.Println("ch2通道已经关闭。。")
} default:
fmt.Println("default语句。。。")
} fmt.Println("main..over...")
}

 

最新文章

  1. git学习(二):查看状态和具体改动
  2. GDB调试器
  3. R简易入门(一)
  4. UVA 11624 Fire! BFS搜索
  5. rest简单实例
  6. 详解python2 和 python3的区别
  7. 邓_ecshop
  8. Dubbo广播模式下报错:Can&#39;t assign requested address解决办法
  9. 详解linux进程间通信-管道 popen函数 dup2函数
  10. 动态链接库-Win32 DLL的说明
  11. MySQL 的安装
  12. win10安装Oracle11g,出现INS-13001环境不满足最低要求问题
  13. Python requests代理
  14. 潭州课堂25班:Ph201805201 mongo数据 库 第八课 (课堂笔记)
  15. 在不安装oracle客户端的情况下,使用PLSQL
  16. KKT条件的物理意义(转)
  17. nodejs改变代码不需要重启的方法
  18. Java虚拟机(七):JVM调优案列
  19. PAT 1108 Finding Average [难]
  20. Network LCA修改点权

热门文章

  1. 小希的迷宫 HDU - 1272
  2. win10中安装jdk1.8
  3. HDFS的扩容
  4. Hadoop报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=xxxx
  5. DirectX11--HLSL语法入门
  6. 菜不成声 的 ac自动机 刷题记录
  7. python之爬虫(爬取.ts文件并将其合并为.MP4文件——以及一些异常的注意事项)
  8. Selenium3+python自动化006+自动化测试概述
  9. Python入门9 —— 循环
  10. K8s控制器