select 語(yǔ)句使得一個(gè) goroutine 在多個(gè)通訊操作上等待。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了清鎮(zhèn)免費(fèi)建站歡迎大家使用!
select 會(huì)阻塞,直到條件分支中的某個(gè)可以繼續(xù)執(zhí)行,這時(shí)就會(huì)執(zhí)行那個(gè)條件分支。當(dāng)多個(gè)都準(zhǔn)備好的時(shí)候,會(huì)隨機(jī)選擇一個(gè)。
復(fù)制代碼代碼如下:
package main
import "fmt"
func fibonacci(c, quit chan int) {
x, y := 1, 1
for {
select {
case c - x:
x, y = y, x + y
case -quit:
fmt.Println("quit")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
go func() {
for i := 0; i 10; i++ {
fmt.Println(-c)
}
quit - 0
}()
fibonacci(c, quit)
}
默認(rèn)選擇
當(dāng) select 中的其他條件分支都沒(méi)有準(zhǔn)備好的時(shí)候,default 分支會(huì)被執(zhí)行。
為了非阻塞的發(fā)送或者接收,可使用 default 分支:
select {
case i := -c:
// use i
default:
// receiving from c would block
}
復(fù)制代碼代碼如下:
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1e8)
boom := time.After(5e8)
for {
select {
case -tick:
fmt.Println("tick.")
case -boom:
fmt.Println("BOOM!")
return
default:
fmt.Println(" .")
time.Sleep(5e7)
}
}
}
有數(shù)量不定的goroutine往channel里塞東西,然后select來(lái)接收并處理。如果所有的goroutine都完成工作,ch也接收完了,那么select就會(huì)阻塞?,F(xiàn)在我想要跳出死循環(huán),大概是在for循環(huán)里設(shè)置一些東西,不知道可不可以實(shí)現(xiàn),或者有類(lèi)似的解決方法。
go func(){ for{ select{ case v:= 《-ch: //這里打左尖括號(hào)排版就會(huì)亂,不知道是不是網(wǎng)站的bug DoSomething() } } }()
1 select語(yǔ)句的每個(gè)case語(yǔ)句必須IO操作
2 執(zhí)行 case 語(yǔ)句順序是隨機(jī)的
3 select的每個(gè)case(包含default)語(yǔ)句是阻塞的
4 如果case語(yǔ)句均發(fā)生阻塞,那么執(zhí)行default語(yǔ)句
網(wǎng)頁(yè)名稱(chēng):go語(yǔ)言里select go語(yǔ)言里的數(shù)組
網(wǎng)頁(yè)地址:http://bm7419.com/article36/ddegepg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷(xiāo)推廣、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站營(yíng)銷(xiāo)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)