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

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

 更新時間:2020年12月15日 10:18:33   作者:陳永坤  
這篇文章主要介紹了golang 跳出for循環(huán)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

執(zhí)行以下代碼,發(fā)現無法跳出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)內 i=", i)
 }
 fmt.Println("for循環(huán)外")
}

解決辦法有兩個:

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)內 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)內 i=", i)
 }
Loop:
 fmt.Println("for循環(huán)外")
}

分析:

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

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

通常在for循環(huán)中,使用break可以跳出循環(huán),但是注意在go語言中,for select配合時,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")
}

如下調用:

//嘗試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)

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

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

了解決這個問題,需要設置標簽,break 標簽或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")
}

同樣調用,輸出結果如下:

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • 詳解Go?語言如何通過測試保證質量

    詳解Go?語言如何通過測試保證質量

    這篇文章主要為大家介紹了Go?語言如何通過測試保證質量詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Golang如何將上傳的文件壓縮成zip(小案例)

    Golang如何將上傳的文件壓縮成zip(小案例)

    這篇文章主要介紹了Golang如何將上傳的文件壓縮成zip(小案例),這是一個簡單的golang壓縮文件小案例,可做很多的拓展,這里使用的庫是archive/zip,在gopkg里面搜zip就行,需要的朋友可以參考下
    2024-01-01
  • Go語言程序開發(fā)gRPC服務

    Go語言程序開發(fā)gRPC服務

    這篇文章主要為大家介紹了Go語言程序開發(fā)gRPC服務,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go語言結構體定義和使用方法

    Go語言結構體定義和使用方法

    這篇文章主要介紹了Go語言結構體定義和使用方法,以實例形式分析了Go語言中結構體的定義和使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • golang生成vcf通訊錄格式文件詳情

    golang生成vcf通訊錄格式文件詳情

    這篇文章主要介紹了golang生成vcf通訊錄格式文件詳情,?VCF是通訊錄格式文件,一般需要用手機通訊錄導入導出的文件格式都是vcf格式。?下面詳細內容介紹需要的小伙伴可以參考一下
    2022-03-03
  • 從淺入深帶你掌握Golang數據結構map

    從淺入深帶你掌握Golang數據結構map

    在?Go?語言中,map?是一種非常常見的數據類型,它可以用于快速地檢索數據。本篇文章將介紹?Go?語言中的?map,包括?map?的定義、初始化、操作和優(yōu)化,需要的可以參考一下
    2023-04-04
  • golang中struct和[]byte的相互轉換示例

    golang中struct和[]byte的相互轉換示例

    這篇文章主要介紹了golang中struct和[]byte的相互轉換示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • golang bufio包中Write方法的深入講解

    golang bufio包中Write方法的深入講解

    這篇文章主要給大家介紹了關于golang bufio包中Write方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • go語言實現全排列的示例代碼

    go語言實現全排列的示例代碼

    本文主要介紹了go語言實現全排列的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Go?iota關鍵字與枚舉類型實現原理

    Go?iota關鍵字與枚舉類型實現原理

    這篇文章主要介紹了Go?iota關鍵字與枚舉類型實現原理,iota是go語言的常量計數器,只能在常量的表達式中使用,更多相關內容需要的小伙伴可以參考一下
    2022-07-07

最新評論