欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang 跳出多重循環(huán)的高級(jí)break用法說(shuō)明

 更新時(shí)間:2020年12月16日 08:34:47   作者:冷手馬  
這篇文章主要介紹了golang 跳出多重循環(huán)的高級(jí)break用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

平時(shí)寫代碼過(guò)程中難免會(huì)遇到循環(huán)嵌套的操作,這時(shí)候最頭疼的就是在break的時(shí)候需要一層一層的退出或者使用goto語(yǔ)句,golang有一種和goto方式類似但是goto方式更友好并且更易讀的高級(jí)break用法,就是在循環(huán)外使用label標(biāo)記退出哪一層循環(huán)的方式。

示例代碼:

I:
 for i := 0; i < 2; i++ {
 for j := 0; j < 5; j++ {
 if j == 2 {
 break I
 }
 fmt.Println("hello")
 }
 fmt.Println("hi")
 }

程序的運(yùn)行結(jié)果:

hello

hello

補(bǔ)充:golang for的select體中如何break外層循環(huán)

問(wèn)題

默認(rèn)在select中break是只跳脫了select體,而不是結(jié)束for循環(huán)

for {
 select{
 case <-tick.C:
  //do someting
 case <- stop:
  break //break的不是for循環(huán), 而是跳脫select,執(zhí)行doNext()
 }
 doNext()
}

如何在for的select體中break到外層循環(huán)呢?

1.解決辦法

1.1 使用帶標(biāo)簽的break

LOOP: for {
 select{
 case <-tick.C:
  //do someting
 case <- stop:
  break LOOP//break的for循環(huán),跳轉(zhuǎn)執(zhí)行doOther()
 }
 doNext()
}
doOther()

等價(jià)于C的goto,但是又不同。比如這里for循環(huán)前的標(biāo)簽,對(duì)于如果使用goto LOOP會(huì)導(dǎo)致再次執(zhí)行循環(huán)。但是golang的break到這里是跳出循環(huán),執(zhí)行循環(huán)之后的操作

1.2 使用return

for {
 select{
 case <-tick.C:
  //do someting
 case <- stop:
  return //干凈利落,適合退出goroutin的場(chǎng)景
 }
 doNext()
}
doOther()

1.3 使用標(biāo)志

isStop := false
for {
 select{
 case <-tick.C:
  //do someting
 case <- stop:
  isStop = true//干凈利落,適合退出goroutin的場(chǎng)景
  break
 }
 if isStop {
 break
 }
 doNext()
}
doOther()

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

相關(guān)文章

  • 關(guān)于go-zero單體服務(wù)使用泛型簡(jiǎn)化注冊(cè)Handler路由的問(wèn)題

    關(guān)于go-zero單體服務(wù)使用泛型簡(jiǎn)化注冊(cè)Handler路由的問(wèn)題

    這篇文章主要介紹了go-zero單體服務(wù)使用泛型簡(jiǎn)化注冊(cè)Handler路由,涉及到Golang環(huán)境安裝及配置Go Module的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Go Context庫(kù) 使用基本示例

    Go Context庫(kù) 使用基本示例

    在Go的http包中,每個(gè)請(qǐng)求由獨(dú)立的goroutine處理,這些goroutine可能需要訪問(wèn)請(qǐng)求特定的數(shù)據(jù)或啟動(dòng)其他服務(wù),Context在Go語(yǔ)言中提供了一種方式來(lái)傳遞請(qǐng)求域的數(shù)據(jù)、取消信號(hào)和截止時(shí)間,本文介紹Go Context庫(kù) 使用基本示例,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Go語(yǔ)言使用AES加密解密的示例代碼

    Go語(yǔ)言使用AES加密解密的示例代碼

    這篇文章主要介紹了Go語(yǔ)言使用AES加密解密的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 詳解golang中?work與?module?的區(qū)別與聯(lián)系

    詳解golang中?work與?module?的區(qū)別與聯(lián)系

    Go?模塊通常由一個(gè)項(xiàng)目或庫(kù)組成,并包含一組隨后一起發(fā)布的?Go?包,Go?模塊通過(guò)允許用戶將項(xiàng)目代碼放在他們選擇的目錄中并為每個(gè)模塊指定依賴項(xiàng)的版本,解決了原始系統(tǒng)的許多問(wèn)題,本文將給大家介紹一下golang中?work與?module?的區(qū)別與聯(lián)系,需要的朋友可以參考下
    2023-09-09
  • 深入理解Go高級(jí)并發(fā)模式編寫更高效可擴(kuò)展的應(yīng)用程序

    深入理解Go高級(jí)并發(fā)模式編寫更高效可擴(kuò)展的應(yīng)用程序

    Go對(duì)并發(fā)提供了強(qiáng)大的原生支持,本文討論Go的高級(jí)并發(fā)模式,理解這些并發(fā)模式,可以幫助我們編寫高效的Go應(yīng)用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • Go 并發(fā)控制context實(shí)現(xiàn)原理剖析(小結(jié))

    Go 并發(fā)控制context實(shí)現(xiàn)原理剖析(小結(jié))

    Golang context是Golang應(yīng)用開發(fā)常用的并發(fā)控制技術(shù),這篇文章主要介紹了Go 并發(fā)控制context實(shí)現(xiàn)原理剖析(小結(jié)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Go 1.21新增的slices包中切片函數(shù)用法詳解

    Go 1.21新增的slices包中切片函數(shù)用法詳解

    Go 1.21新增的 slices 包提供了很多和切片相關(guān)的函數(shù),可以用于任何類型的切片,本文通過(guò)代碼示例為大家介紹了部分切片函數(shù)的具體用法,感興趣的小伙伴可以了解一下
    2023-08-08
  • Go語(yǔ)言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運(yùn)算

    Go語(yǔ)言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運(yùn)算

    這篇文章主要為大家介紹了Go語(yǔ)言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運(yùn)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語(yǔ)言流程控制詳情

    Go語(yǔ)言流程控制詳情

    這篇文章主要介紹了Go語(yǔ)言流程控制詳情,流程控制包含分三大類:條件判斷,循環(huán)控制和無(wú)條件跳轉(zhuǎn)。下面關(guān)于更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • 精通Go語(yǔ)言日志記錄高效日志管理

    精通Go語(yǔ)言日志記錄高效日志管理

    本文將深入探討 Go 語(yǔ)言中的日志記錄,包括 Go 的標(biāo)準(zhǔn)日志庫(kù)的使用、流行的第三方日志庫(kù)以及如何在實(shí)際項(xiàng)目中實(shí)現(xiàn)有效的日志管理
    2023-11-11

最新評(píng)論