佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > golang 跳出for循環(huán)操作

golang 跳出for循環(huán)操作

熱門標(biāo)簽:Linux服務(wù)器 地方門戶網(wǎng)站 網(wǎng)站排名優(yōu)化 AI電銷 鐵路電話系統(tǒng) 百度競(jìng)價(jià)排名 服務(wù)外包 呼叫中心市場(chǎng)需求

執(zhí)行以下代碼,發(fā)現(xiàn)無(wú)法跳出for循環(huán):

func SelectTest() {
 i := 0
 for {
 select {
 case -time.After(time.Second * time.Duration(2)):
 i++
 if i == 5 {
 fmt.Println("跳出for循環(huán)")
 }
 }
 fmt.Println("for循環(huán)內(nèi) i=", i)
 }
 fmt.Println("for循環(huán)外")
}

解決辦法有兩個(gè):

1.使用break:

func SelectTest() {
 i := 0
Loop:
 for {
 select {
 case -time.After(time.Second * time.Duration(2)):
 i++
 if i == 5 {
 fmt.Println("跳出for循環(huán)")
 break Loop
 }
 }
 fmt.Println("for循環(huán)內(nèi) i=", i)
 }
 fmt.Println("for循環(huán)外")
}

2.使用goto:

func SelectTest() {
 i := 0
 for {
 select {
 case -time.After(time.Second * time.Duration(2)):
 i++
 if i == 5 {
 fmt.Println("跳出for循環(huán)")
 goto Loop
 }
 }
 fmt.Println("for循環(huán)內(nèi) i=", i)
 }
Loop:
 fmt.Println("for循環(huán)外")
}

分析:

使用break lable 和 goto lable 都能跳出for循環(huán);不同之處在于:break標(biāo)簽只能用于for循環(huán),且標(biāo)簽位于for循環(huán)前面,goto是指跳轉(zhuǎn)到指定標(biāo)簽處

補(bǔ)充:golang跳出for select 循環(huán)

通常在for循環(huán)中,使用break可以跳出循環(huán),但是注意在go語(yǔ)言中,for select配合時(shí),break并不能跳出循環(huán)。

func testSelectFor(chExit chan bool){
 for {
 select {
 case v, ok := -chExit:
 if !ok {
 fmt.Println("close channel 1", v)
 break
 }
 fmt.Println("ch1 val =", v)
 }
 }
 fmt.Println("exit testSelectFor")
}

如下調(diào)用:

//嘗試2 select for 跳出循環(huán)
c := make(chan bool)
go testSelectFor(c)
 
c - true
c - false
close(c)
 
time.Sleep(time.Duration(2) * time.Second)

運(yùn)行結(jié)果如下,可以看到break無(wú)法跳出循環(huán):

...
close channel 1 false
close channel 1 false
close channel 1 false
close channel 1 false
...

了解決這個(gè)問(wèn)題,需要設(shè)置標(biāo)簽,break 標(biāo)簽或goto 便簽即可跳出循環(huán),如下兩種方法均可。

func testSelectFor2(chExit chan bool){
 EXIT:
 for {
 select {
 case v, ok := -chExit:
 if !ok {
 fmt.Println("close channel 2", v)
 break EXIT//goto EXIT2
 }
 
 fmt.Println("ch2 val =", v)
 }
 }
 //EXIT2:
 fmt.Println("exit testSelectFor2")
}

同樣調(diào)用,輸出結(jié)果如下:

ch2 val = true
ch2 val = false
close channel 2 false
exit testSelectFor2

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang中for循環(huán)遍歷channel時(shí)需要注意的問(wèn)題詳解
  • Golang常見(jiàn)錯(cuò)誤之值拷貝和for循環(huán)中的單一變量詳解
  • Golang實(shí)現(xiàn)for循環(huán)運(yùn)行超時(shí)后自動(dòng)退出的方法
  • golang語(yǔ)言中for循環(huán)語(yǔ)句用法實(shí)例

標(biāo)簽:仙桃 湘潭 衡水 銅川 湖南 蘭州 黃山 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang 跳出for循環(huán)操作》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    棋牌| 家居| 凤山县| 高唐县| 揭西县| 蕲春县| 浦县| 岳池县| 华亭县| 高安市| 买车| 玉环县| 白山市| 遵义市| 漳浦县| 瓮安县| 健康| 烟台市| 台山市| 长顺县| 镇沅| 赞皇县| 抚松县| 阿拉善盟| 永州市| 新乡市| 中牟县| 万宁市| 射阳县| 乌拉特前旗| 井陉县| 岳池县| 海盐县| 朝阳区| 谷城县| 武夷山市| 丹阳市| 红安县| 赫章县| 彭水| 永丰县|