首頁 > 後端開發 > Golang > 關於golang當中對select的理解

關於golang當中對select的理解

藏色散人
發布: 2020-08-26 11:46:45
轉載
2884 人瀏覽過

下方由Golang教學專欄為大家一起介紹關於golang當中對select的理解,希望對需要的朋友有所幫助!

關於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中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板