1、Go語言中select概念
golang 的 select 就是監聽 IO 操作,當 IO 操作發生時,觸發相應的動作。
在執行select語句的時候,運行時系統會自上而下地判斷每個case中的發送或接收操作是否可以被立即執行(立即執行:意思是當前Goroutine不會因此操作而被阻塞)
select的用法與switch非常類似,由select開始一個新的選擇塊,每個選擇條件由case語句來描述。與switch語句可以選擇任何可使用相等比較的條件相比,select有比較多的限制,其中最大的一條限制就是每個case語句裏必須是一個IO操作,確切的說,應該是一個面向channel的IO操作。
select 主要用於在Go語言中實現 channel 非阻塞式獲取或寫入數據,在默認情況下 channel 收發數據都是阻塞式的。
2、select 代碼示例
package main
import "fmt"
func main() {
ch1 := make(chan int, 2)
ch2 := make(chan int, 2)
ch1 <- 1
ch2 <- 2
select {
case e1 := <-ch1:
//如果ch1通道成功讀取數據,則執行該case處理語句
fmt.Printf("1th case is selected. e1=%v", e1)
case e2 := <-ch2:
//如果ch2通道成功讀取數據,則執行該case處理語句
fmt.Printf("2th case is selected. e2=%v", e2)
default:
//如果上面case都沒有成功,則進入default處理流程
fmt.Println("default!.")
}
}