go select case 隨機調用

 

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
}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章