golang 跳出多重循環(huán)的高級(jí)break用法說(shuō)明
平時(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)題
這篇文章主要介紹了go-zero單體服務(wù)使用泛型簡(jiǎn)化注冊(cè)Handler路由,涉及到Golang環(huán)境安裝及配置Go Module的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07詳解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對(duì)并發(fā)提供了強(qiáng)大的原生支持,本文討論Go的高級(jí)并發(fā)模式,理解這些并發(fā)模式,可以幫助我們編寫高效的Go應(yīng)用程序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02Go 并發(fā)控制context實(shí)現(xiàn)原理剖析(小結(jié))
Golang context是Golang應(yīng)用開發(fā)常用的并發(fā)控制技術(shù),這篇文章主要介紹了Go 并發(fā)控制context實(shí)現(xiàn)原理剖析(小結(jié)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10Go 1.21新增的slices包中切片函數(shù)用法詳解
Go 1.21新增的 slices 包提供了很多和切片相關(guān)的函數(shù),可以用于任何類型的切片,本文通過(guò)代碼示例為大家介紹了部分切片函數(shù)的具體用法,感興趣的小伙伴可以了解一下2023-08-08Go語(yǔ)言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運(yùn)算
這篇文章主要為大家介紹了Go語(yǔ)言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運(yùn)算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12