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會隨機公平地選出一個執行。 其他不會執行。
否則:- 如果有default子句,則執行該語句。
- 如果沒有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