Golang:流程控制

流程控制是每種編程語言走向和執(zhí)行次序的重要部分

golang中最常用的流程控制有iffor,而switchgoto主要是為了簡化代碼、降低重復代碼而生的結(jié)構(gòu),屬于擴展類的流程控制。

if else(分支結(jié)構(gòu))

if 條件判斷基本寫法

if 表達式1 {
    分支1
} else if 表達式2 {
    分支2
} else{
    分支3
}

if條件判斷的特殊寫法

if條件判斷可以在if表達式之前添加一個執(zhí)行語句,再根據(jù)變量值進行判斷:

func main() {
    if score := 65; score > 90 {
        fmt.Println("A")
    } else if score > 75 {
        fmt.Println("B")
    } else {
        fmt.Println("C")
    }
}

for(循環(huán)結(jié)構(gòu))

golang中的所有循環(huán)類型均可以使用for關(guān)鍵字來完成

for循環(huán)基本格式:

for 初始語句;條件表達式;結(jié)束語句{
    循環(huán)體語句
}

例子:

func forDemo() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

可以省略初始語句,單分號一定要寫:

func forDemo2() {
    i := 0
    for ; i < 10; i++ {
        fmt.Println(i)
    }
}

也可以省略初始語句和結(jié)束語句:

func forDemo3() {
    i := 0
    for i < 10 {
        fmt.Println(i)
        i++
    }
}

這種寫法類似于其他編程語言中的while,在while后添加一個條件表達式,滿足條件表達式時持續(xù)循環(huán),否則結(jié)束循環(huán)。

無限循環(huán)

for {
    循環(huán)體語句
}

for循環(huán)可以通過breakgoto、returnpanic語句強制退出循環(huán)。

for range(簡直循環(huán))

Go語言中可以使用for range遍歷數(shù)組、切片、字符串、map 及通道(channel)。 通過for range遍歷的返回值有以下規(guī)律:

  1. 數(shù)組、切片、字符串返回索引和值。
  2. map返回鍵和值。
  3. 通道(channel)只返回通道內(nèi)的值。

switch case

使用switch語句可以方便對大量值進行判斷

func switchDemo1() {
    finger := 3
    switch finger {
    case 1:
        fmt.Println("大拇指")
    case 2:
        fmt.Println("食指")
    case 3:
        fmt.Println("中指")
    case 4:
        fmt.Println("無名指")
    case 5:
        fmt.Println("小拇指")
    default:
        fmt.Println("無效的輸入!")
    }
}

Go語言規(guī)定每個switch只能有一個default分支。

一個分支可以有多個值,多個case值中間使用逗號分割:

func testSwitch3() {
    switch n := 7; n {
    case 1, 3, 5, 7, 9:
        fmt.Println("奇數(shù)")
    case 2, 4, 6, 8:
        fmt.Println("偶數(shù)")
    default:
        fmt.Println(n)
    }
}

分支還可以使用表達式:

func switchDemo4() {
    age := 30
    switch {
    case age < 25:
        fmt.Println("好好學習吧")
    case age > 25 && age < 35:
        fmt.Println("好好工作吧")
    case age > 60:
        fmt.Println("好好享受吧")
    default:
        fmt.Println("活著真好")
    }
}

fallthrough語法可以執(zhí)行滿足條件的case的下一個case,是為了兼容C語言中的case設(shè)計的。

func switchDemo5() {
    s := "a"
    switch {
    case s == "a":
        fmt.Println("a")
        fallthrough
    case s == "b":
        fmt.Println("b")
    case s == "c":
        fmt.Println("c")
    default:
        fmt.Println("...")
    }
}

輸出:

a
b

goto(跳轉(zhuǎn)到指定標簽)

goto語句通過標簽進行代碼間無條件跳轉(zhuǎn)。goto語句可以快速跳出循環(huán)、避免重復退出。

使用goto語句能簡化代碼實現(xiàn)過程,例如雙層嵌套的for循環(huán)要退出時。

例子:

func gotoDemo1() {
    var breakFlag bool
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
            if j == 2 {
                // 設(shè)置退出標簽
                breakFlag = true
                break
            }
            fmt.Printf("%v-%v\n", i, j)
        }
        // 外層for循環(huán)判斷
        if breakFlag {
            break
        }
    }
}

使用goto語句能簡化代碼:

func gotoDemo2() {
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
            if j == 2 {
                // 設(shè)置退出標簽
                goto breakTag
            }
            fmt.Printf("%v-%v\n", i, j)
        }
    }
    return
    // 標簽
breakTag:
    fmt.Println("結(jié)束for循環(huán)")
}

break(大跳)

break語句可以結(jié)束for、switchselect的代碼塊。

break語句還可以在語句后面添加標簽,表示退出某個標簽對應的代碼塊,標簽要求必須定義在對應的for、switchselect的代碼塊上。 舉個例子:

func breakDemo1() {
BREAKDEMO1:
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
            if j == 2 {
                break BREAKDEMO1
            }
            fmt.Printf("%v-%v\n", i, j)
        }
    }
    fmt.Println("...")
}

continue(小跳)

continue語句可以結(jié)束當前循環(huán),開始下一次的循環(huán)迭代過程,僅限在for循環(huán)內(nèi)使用。

continue語句后添加標簽時,表示開始標簽對應的循環(huán)。例如:

func continueDemo() {
forloop1:
    for i := 0; i < 5; i++ {
        // forloop2:
        for j := 0; j < 5; j++ {
            if i == 2 && j == 2 {
                continue forloop1
            }
            fmt.Printf("%v-%v\n", i, j)
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 選擇結(jié)構(gòu)if C語言中有三目運算符 ?: Go語言中沒有,所有用三目解決的問題使用 if-else 來解決 C...
    籮篼閱讀 365評論 0 0
  • Swift 提供了類似 C 語言的流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務的for和while循環(huán),基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 780評論 1 1
  • [The Swift Programming Language 中文版]本頁包含內(nèi)容: Swift提供了多種流程控...
    風林山火閱讀 683評論 0 0
  • Swift提供了多種控制流聲明。包括while循環(huán)來多次執(zhí)行一個任務;if,guard和switch聲明來根據(jù)確定...
    BoomLee閱讀 2,072評論 0 3
  • 今天下午,老師給我們發(fā)了一條紅領(lǐng)巾,這代表著我們已經(jīng)成為了一名少先隊員。 我感到很光榮,很自豪!以后我會更加...
    舍予亦閱讀 96評論 0 0

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