關(guān)于golang當中對select的分析

這篇文章將為大家詳細講解有關(guān)關(guān)于golang當中對select的分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到贊皇網(wǎng)站設(shè)計與贊皇網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋贊皇地區(qū)。

Select 語句和 Swithc 語句的句式十分相似,但是 Select 中的 Case 必須是一個通信操作(一個 Channel 操作)。其執(zhí)行邏輯是:哪一個 Case 后面的 Channel 操作可以被成功執(zhí)行,則執(zhí)行該 Case 下的代碼塊。如果同時多個 Case 可被成功執(zhí)行,則隨機選擇其中一個。如果所有 Case 均不可被成功執(zhí)行,則執(zhí)行 default 下的代碼塊。如果沒有 default 則會阻塞并返回死鎖錯誤。

監(jiān)聽 IO 操作,當 IO 操作發(fā)生時,觸發(fā)相應(yīng)的動作
這個說法是對的,監(jiān)聽(Channel 的) IO 操作并作出相應(yīng)動作確實是 Select 的應(yīng)用場景,但是千萬不要誤以為 Select 語句是在選擇哪個 case 下的 Channel 操作被執(zhí)行了!這么理解是錯的!Select 真正會選擇的是哪個 case 下的 Channel 操作可以被成功執(zhí)行,則執(zhí)行該 case 下的代碼塊。

比如,當一個 Channel c1 被寫入一條數(shù)據(jù)

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")}

你會得到如下結(jié)果

Case 1 is selected

因為 c1 被寫入了一條數(shù)據(jù),所以我們可以成功 “從 c1 讀出一條數(shù)據(jù)”。也就是第一個 case 可以被成功執(zhí)行。所以,第一個 case 下的代碼塊最終被執(zhí)行。                      

關(guān)于關(guān)于golang當中對select的分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

新聞標題:關(guān)于golang當中對select的分析
當前路徑:http://muchs.cn/article34/isjdpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、軟件開發(fā)、做網(wǎng)站品牌網(wǎng)站制作、網(wǎng)站收錄ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)