下方由Golang教學專欄為大家一起介紹關於golang當中對select的理解,希望對需要的朋友有所幫助!
Select 語句和 Swithc 語句的句式十分相似,但是 Select 中的 Case 必須是一個通訊運算(一個 Channel 運算)。其執行邏輯為:哪一個 Case 後面的 Channel 操作可以成功執行,則執行該 Case 下的程式碼區塊。如果同時多個 Case 可成功執行,則隨機選取其中一個。如果所有 Case 均不可成功執行,則執行 default 下的程式碼區塊。如果沒有 default 則會阻塞並傳回死鎖錯誤。
監聽IO 操作,當IO 操作發生時,觸發相應的動作
這個說法是對的,監聽(Channel 的) IO 操作並作出相應動作確實是Select 的應用場景,但是千萬不要誤以為Select 語句是在選擇哪個case 下的Channel 操作被執行了!這麼理解是錯的! Select 真正會選擇的是哪個 case 下的 Channel 操作可以成功執行,則執行該 case 下的程式碼區塊。
例如,當一個Channel c1 被寫入一個資料
c1 := make(chan string, 1)c1 <- "Hello World!"
如果我們有以下Select 判斷語句
select { case <-c1: fmt.Println("Case 1 is selected") case c1<-"Hello World!": fmt.Println("Case 2 is selected") default : fmt.Println("Default is selected")}
你會得到如下結果
Case 1 is selected
因為c1 被寫入了一條數據,所以我們可以成功「從c1 讀出一條數據」。也就是第一個 case 可以成功執行。所以,第一個 case 下的程式碼區塊最終被執行。
以上是關於golang當中對select的理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!