這個說法是對的,監(jiān)聽(Channel 的) IO 操作并作出相應(yīng)動作確實是 Select 的應(yīng)用場景,但是千萬不要誤以為 Select 語句是在選擇哪個 case 下的 Channel 操作被執(zhí)行了!這么理解是錯的!Select 真正會選擇的是哪個 case 下的 Channel 操作可以被成功執(zhí)行,則執(zhí)行該 case 下的代碼塊。
比如,當(dāng)一個 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)于云服務(wù)器,域名注冊,虛擬主機的問題,請訪問西部數(shù)碼官網(wǎng):m.ps-sw.cn