package main import ( "fmt" "runtime" ) /* 1. go select是一種僅能用於channel發送和接收消息的語句,此語句運行期間是阻塞的;當 select中沒有case語句的時候,會阻塞當前goroutine 2. select是go在語言層面提供的IO多路複用機制,專門用於檢測多個channel是否準備完畢:可讀可寫 3. select語句中除default外,每個case操作一個channel,要麼讀要麼寫 4. select語句中除default外,各case的執行順序是完全隨機的 5. select中如果沒有default語句,則會阻塞等待任一case 6. select語句中讀操作要判斷是否成功讀取,關閉的channel也可以讀取 */ func main() { runtime.GOMAXPROCS(1) int_chan := make(chan int, 1) string_chan := make(chan string, 1) int_chan <- 1 string_chan <- "hello" select { case value := <-int_chan: fmt.Println(value) case value := <-string_chan: fmt.Println(value) } //有的時候輸出1,有的時候輸出hello }