select語句用來處理與channel有關的i/o操作。
每個case都必須是乙個通訊;
所有channel表示式和被傳送的表示式都會被求值;
任意某個通道可以執行,它就執行,其他被忽略;
多個case可以執行,隨機選乙個執行;
都不可以執行,有default,執行default,沒有就阻塞,直到某個通訊可以執行,且不會重新對表示式求值;
乙個select最多執行一次case裡的**,需要一直檢測case,外層加for迴圈;
case裡的break只退出當前select,和for迴圈無關;
示例一,執行default:
func
main()
()gofunc()
()select
}
結果總是列印:no i/o operation,因為當主線程走到select時,兩個channel所在goroutine裡的channel還沒有等待寫入,輸出就會阻塞,執行default。
示例二,隨機執行case:
func
main()
()gofunc()
()time.
sleep(2
* time.second)
select
}
結果隨機列印:ch1 receive: 1或ch2 receive: 2,因為兩個channal等待寫入,select裡兩個case都符合執行條件,隨機執行。
示例三,所有表示式都會被求值:
func
main()
()gofunc()
()select
}func
getvalue
(i int
)int
func
getchannel
(i int
, ch chan
int)
chan
int
結果列印如下,case所有表示式從左到右,從上到下,依次求值:
getchannel:
1getvalue:
1getchannel:
2getvalue:
2no i/o operation
示例一,當有goroutine執行時,用select{} 簡單阻塞一下主流程:
func
main()
}()select
}
示例二,實現對 channel 操作的超時設定:
func
main()
()select
}func
main()
}
示例三,檢查 channel 是否已滿阻塞:
func
main()
}
示例四,退出函式:
func
main()
default
: fmt.
println
("no i/o operation")}
fmt.
println
("執行結束"
)}
Golang select的使用及典型用法
1 select是go中的乙個控制結構,類似於switch語句,用於處理非同步io操作。select會監聽case語句中channel的讀寫操作,當case中channel讀寫操作為非阻塞狀態 即能讀寫 時,將會觸發相應的動作。select中的case語句必須是乙個channel操作 select中...
Python基礎學習 else和 with語句
1.else語句 while else 語句 n 0jc 1k 123while jc k 0 print d的階乘不大於 d n,k n n 1 jc jc n else print d的階乘剛好大於 d n,k 0的階乘不大於123 1的階乘不大於123 2的階乘不大於123 3的階乘不大於12...
Python基礎之三 Python3 基礎語法
編碼是資訊從一種形式或格式轉換為另一種形式的過程,也稱為計算機程式語言的 簡稱編碼。用預先規定的方法將文字 數字或其它物件編成數碼,或將資訊 資料轉換成規定的電脈衝訊號。編碼在電子計算機 電視 遙控和通訊等方面廣泛使用。編碼是資訊從一種形式或格式轉換為另一種形式的過程。解碼,是編碼的逆過程。pyth...