Go之旅-for循環(huán)

Go之旅-for循環(huán)

Go語(yǔ)言?xún)H有for一種循環(huán)語(yǔ)句,但常用方式都能支持。其中初始化表達(dá)式支持函數(shù)調(diào)用或定義局部變量,需要注意的是初始化語(yǔ)句中的函數(shù)僅執(zhí)行一次,條件表達(dá)式中的函數(shù)重復(fù)執(zhí)行,規(guī)避方式就是在初始化表達(dá)式中定義局部變量保存函數(shù)返回結(jié)果。Go語(yǔ)言中也有g(shù)oto語(yǔ)句,使用goto語(yǔ)句前,必須先定義標(biāo)簽,標(biāo)簽區(qū)分大小寫(xiě),并且未使用的標(biāo)簽會(huì)引發(fā)編譯錯(cuò)誤。和goto定點(diǎn)跳轉(zhuǎn)不同,break、continue用于中斷代碼塊執(zhí)行。break用于switch、for、select語(yǔ)句,終止整個(gè)語(yǔ)句塊執(zhí)行,continue僅用于for循環(huán),終止后續(xù)邏輯,立即進(jìn)入下一輪循環(huán)。break和continue配合標(biāo)簽使用,可以在多層嵌套中指定目標(biāo)層級(jí)。

package main

import (
    "fmt"
)

// count函數(shù)
func count() int {
    fmt.Println("count.") // 打印字符串用來(lái)查看count函數(shù)執(zhí)行次數(shù)
    return 3
}

// main函數(shù)
func main() {
    // for循環(huán)
    // 初始化表達(dá)式,支持函數(shù)調(diào)用或定義局部變量
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    // 類(lèi)似while循環(huán)
    i := 0
    for i < 10 {
        fmt.Println(i)
        i++
    }
    // 類(lèi)似無(wú)限循環(huán)
    for {
        break
    }
    // 初始化語(yǔ)句中的count函數(shù)僅執(zhí)行一次
    for i, c := 0, count(); i < c; i++ {
        fmt.Println("a", i)
    }

    c := 0
    // 條件表達(dá)式中的count函數(shù)重復(fù)執(zhí)行
    for c < count() {
        fmt.Println("b", c)
        c++
    }
    // 規(guī)避條件表達(dá)式中的count函數(shù)重復(fù)執(zhí)行,在初始化表達(dá)式中定義局部變量保存count函數(shù)返回結(jié)果
    count := count()
    d := 0
    for d < count {
        fmt.Println("c", d)
        d++
    }
    // goto定點(diǎn)跳轉(zhuǎn)
    // 須先定義標(biāo)簽,并且未用到的標(biāo)簽會(huì)引發(fā)編譯錯(cuò)誤
    // 不能跳轉(zhuǎn)到其它函數(shù),或內(nèi)層代碼塊內(nèi)
    for i := 0; i < 10; i++ {
        fmt.Println(i)
        if i > 5 {
            goto exit
        }
    }
exit:
    fmt.Println("exit.")

    // break 用戶(hù)switch、for、select語(yǔ)句,終止整個(gè)語(yǔ)句塊執(zhí)行。continue 僅用于for循環(huán),終止后續(xù)邏輯,立即進(jìn)入下一輪循環(huán)
    for i := 0; i < 10; i++ {
        if i%2 == 0 {
            continue // 立即進(jìn)入下一輪循環(huán)
        }
        if i > 5 {
            break // 立即終止整個(gè)for循環(huán)
        }
        fmt.Println(i)
    }
    // 配合標(biāo)簽,break和continue可在多層嵌套中指定目標(biāo)層級(jí)
outer:
    for i := 0; i < 5; i++ {
        for j := 0; j < 10; j++ {
            if j > 2 {
                fmt.Println()
                continue outer
            }

            if i > 2 {
                break outer
            }
            fmt.Print(i, ":", j, " ")
        }
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者的序言 朋友們,棄療系列4出來(lái)啦,作者還并沒(méi)有放棄,感覺(jué)自己萌萌噠,233。 語(yǔ)句 js程序其實(shí)就是一系列可執(zhí)...
    zhaolion閱讀 1,820評(píng)論 0 8
  • 已經(jīng)凌晨了,但不知為何就是不想睡,這夜晚安靜的很美好,很享受,
    耿曉雨閱讀 202評(píng)論 0 0
  • 變量,變量名,變量的值,指針變量概念 變量 其值可以改變的量稱(chēng)這變量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存...
    maimingliang閱讀 424評(píng)論 5 3

友情鏈接更多精彩內(nèi)容