别摸我
别摸我
文章目录
  1. select
  2. switch

go 中的 switch 和 select

switchselect 都是用来做分支操作的, 他们各自适用于不同的场景。

select

select 只能用于 Channel 上的分支操作, 每一个 case 代表一个通信操作(在某个 Channel 上进行发送或者接收), 并且会包含一些语句组成一个语句块。一个接收表达式可能只包含:

  • 表达式自身(不把接收到的值赋值给变量什么的), 像下面第一个 case ,
  • 或者包含在一个一个简短的变量声明中, 像第二个 case

第二种形式让你能够引用接收到的值。

1
2
3
4
5
6
7
8
9
10
select {
case <-ch1:
// ...
case x := <-ch2:
// ...
case ch3 <- y:
// ...
default:
// ...
}

select 会等待 case 中有能够执行的 case 时去执行, 当条件满足时, select 才会去通信并执行 case 之后的语句, 这时候其他通信都不会执行, 一个没有任何 caseselect{} 语句会永远等待下去。

如果有多个 case 同时就绪时, select 会随机地选择一个执行

switch

switch 可以为各种类型进行分支操作, 设置可以为接口类型进行分支判断(通过 i.(type))

switch 分支是顺序执行的,这和 select不同。

支持一下
扫一扫,支持heaven
  • 微信扫一扫
  • 支付宝扫一扫