Golang select 基礎語法與用法

2022-08-23 14:51:15 字數 1731 閱讀 3028

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: 1ch2 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...