Golang 的 select 语句是如何使用的?

Golang 的 select 语句主要用于在多个通信操作中选择一个执行。

语法格式为:

select {
  case comm1: 
    statement1  
  case comm2:
     statement2 
  default:
     default_statement
}
  • comm1 是一个通信操作,可能是:
  • 一个通道 receive 操作
  • 一个通道 send 操作
  • statement1 是对应的语句块
  • 同理 comm2 对应 statement2
  • default 是选择的默认操作

按如下规则执行:

  1. 可以有多个 case 语句,但只有一个被选择执行
  2. 如果有 case 可以通信,就执行一个随机的
  3. 如果没有 case 可运行,就执行 default 操作
  4. 如多个 case 都可运行,将随机选择一个执行
  5. case 语句不依赖排列顺序
  6. 一个 case 可以有多个操作,被选中后会依次执行

举例:

select {  
case <-ch1:
     // ...
case v := <-ch2:  
     // ... 
case ch3 <-v3:     
default:
     // ...
}

总的来说,Go语言的 select 语句可以实现:

  1. 在多个通信操作中选择一个执行
  2. 可用于通道用法丰富
  3. 支持 default 执行流
  4. 如果都可以运行,随机选择一个执行
  5. 可实现超时控制等功能

它可以很方便地协调多个goroutine之间的通信。