流程控制

Go語言中最常用的流程控制有if和for,而switch和goto主要是爲了簡化代碼、降低重複代碼而生的結構,屬於擴展類的路程控制。

 

if else分支結構

  if條件判斷基本寫法

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

  其中當表達式1的結果爲true的時候就會執行分之1否則就判斷表達式2,如果滿足就執行分支2,要是都不滿足就執行分支3,if判斷中的else if和else都是可選的,可以根據實際情況來進行選擇

  Go語言規定與if匹配的左括號{必須與if表達式放在同一行中,{放在其它位置都會觸發編譯錯誤的現象。同理,與else匹配的{也必須放在和else同一行中。

  

  if條件判斷的特殊寫法

    if條件判斷還有一種特殊的寫法,可以在if表達式之前添加一個執行語句,再根據變量的值進行判斷

 

for循環結構:

for 初始語句;條件表達式;結束語句{
    循環體語句
}

 

  條件表達式返回true的時候循環體不停進行循環,直到條件表達式返回的是false時自動退出循環

  其中for循環的初始語句是可以被忽略的,但是後面的那個分號還是要加上的。

  for循環的初始語句和結束語句都是可以省略的,這種寫法類似python中的while循環,while後面添加一個條件表達式,滿足條件表達式時就會持續循環,否則就會結束循環

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

 

 

無限循環:

for {
    循環體語句
}

 

  for循環可以通過break、goto、return、panic語句來強制退出當前循環

 

for range(鍵值循環)

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

    1、數組、切片、字符串返回索引和值

    2、map返回鍵和值

    3、通道channel只返回通道內的值

 

swith case

  使用swith語句可以方便地對大量的值進行條件判斷

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語言規定每個swith只能有一個default分支

  一個分支可以有多個值,多個case值中間使用英文逗號進行隔斷

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

  分支還可以使用表達式,這時候switch語句後面不需要在跟判斷變量。

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語法可以執行滿足條件的case的下一個case,是爲了兼容C語言中的case設計的

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("...")
    }
}

 

 

got跳轉到指定的標籤

  goto語句通過標籤進行代碼間的無條件跳轉。goto語句可以在快速跳出循環、避免重複循環退出上有一定的幫助。Go語言中使用goto語句能簡化一些代碼的實現過程。比如雙層嵌套for循環時要退出的時候

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

  這裏面要是使用goto語句能夠簡化代碼

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

 

break跳出循環:

  break語句可以結束for、switch和select的代碼塊

  break語句還可以在語句後面添加標籤,表示退出某個標籤對應的代碼塊,標籤要求必須定義在對應的for、switch、和select的代碼塊上

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語句可以結束當前循環,開始下一次的循環迭代過程,僅限在for循環內使用

  在continue語句後添加標籤的時候,表示開始標籤對應的循環

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)
        }
    }
}

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章