# Go 語言 select 語句
select是Go中的一個控制結構,類似于用于通信的switch語句。每個case必須是一個通信操作,要么是發送要么是接收。
select隨機執行一個可運行的case。如果沒有case可運行,它將阻塞,直到有case可運行。一個默認的子句應該總是可運行的。
### 語法
Go 編程語言中 select 語句的語法如下:
```
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定義任意數量的 case */
default : /* 可選 */
statement(s);
}
```
以下描述了 select 語句的語法:
* 每個case都必須是一個通信
* 所有channel表達式都會被求值
* 所有被發送的表達式都會被求值
* 如果任意某個通信可以進行,它就執行;其他被忽略。
* 如果有多個case都可以運行,Select會隨機公平地選出一個執行。其他不會執行。
否則:
1. 如果有default子句,則執行該語句。
2. 如果沒有default字句,select將阻塞,直到某個通信可以運行;Go不會重新對channel或值進行求值。
### 實例
```
package main
import "fmt"
func main() {
var c1, c2, c3 chan int
var i1, i2 int
select {
case i1 = <-c1:
fmt.Printf("received ", i1, " from c1\n")
case c2 <- i2:
fmt.Printf("sent ", i2, " to c2\n")
case i3, ok := (<-c3): // same as: i3, ok := <-c3
if ok {
fmt.Printf("received ", i3, " from c3\n")
} else {
fmt.Printf("c3 is closed\n")
}
default:
fmt.Printf("no communication\n")
}
}
```
以上代碼執行結果為:
```
no communication
```
- Go 語言簡介
- Go 語言環境安裝
- Go 語言結構
- Go 語言基礎語法
- Go 語言數據類型
- Go 語言變量
- Go 語言常量
- Go 語言運算符
- Go 語言條件語句
- Go 語言 if 語句
- Go 語言 if...else 語句
- Go 語言 if 語句嵌套
- Go 語言 switch 語句
- Go 語言 select 語句
- Go 語言循環語句
- Go 語言 for 循環
- Go 語言循環嵌套
- Go 語言 break 語句
- Go 語言 continue 語句
- Go 語言 goto 語句
- Go 語言函數
- Go 語言函數值傳遞值
- Go 語言函數引用傳遞值
- Go 語言函數作為值
- Go 語言函數閉包
- Go 語言函數方法
- Go 語言變量作用域
- Go 語言數組
- Go 語言多維數組
- Go 語言向函數傳遞數組
- Go 語言指針
- Go 語言指針數組
- Go 語言指向指針的指針
- Go 語言指針作為函數參數
- Go 語言結構體
- Go 語言切片(Slice)
- Go 語言范圍(Range)
- Go 語言Map(集合)
- Go 語言遞歸函數
- Go 語言類型轉換
- Go 語言接口
- Go 錯誤處理
- Go 語言開發工具