流程控制詳解

大雄45發表於2021-08-16
導讀 除此之外,還有 break 和 continue,都可以搭配迴圈語句和跳轉語句使用。跳轉語句在某些場景下會非常實用,但也很容易出現一些莫名其妙的問題,所以使用起來要更謹慎些。

流程控制詳解流程控制詳解

if-else
if-else特點:
  1. 條件語句不需要使用小括號()包起來;
  1. 花括號{}必須有,並且左花括號{必須和if或else在同一行;
  1. 在if之後,條件語句之前可以新增變數初始化語句,使用;分隔。
package main 
 
import "fmt" 
 
func main() { 
    if 7%2 == 0 { 
        fmt.Println("7 is even") 
    } else { 
        fmt.Println("7 is odd") // 7 is odd 
    } 
 
    if 8%4 == 0 { 
        fmt.Println("8 is divisible by 4") // 8 is divisible by 4 
    } 
 
    if num := 9; num < 0 { 
        fmt.Println(num, "is negative") 
    } else if num < 10 { 
        fmt.Println(num, "has 1 digit") // 9 has 1 digit 
    } else { 
        fmt.Println(num, "has multiple digits") 
    } 
}
switch
switch特點:
  1. 左花括號 { 必須和 switch 在同一行;
  1. 條件表示式不限制常量或者整數;
  1. switch 後可新增變數初始化語句,使用 ; 分割;
  1. 可以不設定條件表示式,在此種情況下,整個 switch 結構與多個 if-else 的邏輯作用等同;
  1. 單個 case 中可以出現多個結果選項;
  1. 在 case 中新增 fallthrough 關鍵字,會繼續執行緊跟的下一個 case,不需要判斷 case 的條件語句;
  1. switch 支援 default 語句,當所有 case 都不滿足時,執行 default 語句。
package main 
 
import ( 
    "fmt" 
    "time" 
) 
 
func main() { 
    i := 2 
    fmt.Print("write ", i, " as ") 
    switch i { 
    case 1: 
        fmt.Println("one") 
    case 2: 
        fmt.Println("two") // write 2 as two 
        fallthrough 
    case 3: 
        fmt.Println("three") // three 
    case 4, 5, 6: 
        fmt.Println("four, five, six") 
    } 
 
    switch num := 9; num { 
    case 1: 
        fmt.Println("one") 
    default: 
        fmt.Println("nine") // nine 
    } 
 
    switch time.Now().Weekday() { 
    case time.Saturday, time.Sunday: 
        fmt.Println("it's the weekend") 
    default: 
        fmt.Println("it's a weekday") // it's a weekday 
    } 
 
    t := time.Now() 
    switch { 
    case t.Hour() < 12: 
        fmt.Println("it's before noon") 
    default: 
        fmt.Println("it's after noon") // it's after noon 
    } 
}
for
for特點:
  1. 條件表示式不需要使用小括號 () 包起來;
  1. 花括號 {} 必須有,並且左花括號 { 必須和 for 在同一行;
  1. 支援 continue 和 break。
package main 
 
import ( 
    "fmt" 
) 
 
func main() { 
    i := 1 
    // 只有條件 
    for i <= 3 { 
        fmt.Println(i) 
        i = i + 1 
    } 
 
    // 有變數初始化和條件 
    for j := 7; j <= 9; j++ { 
        fmt.Println(j) 
    } 
 
    // 死迴圈 
    for { 
        fmt.Println("loop") 
        break 
    } 
 
    // 遍歷陣列 
    a := [...]int{10, 20, 30, 40} 
    for i := range a { 
        fmt.Println(i) 
    } 
    for i, v := range a { 
        fmt.Println(i, v) 
    } 
 
    // 遍歷切片 
    s := []string{"a", "b", "c"} 
    for i := range s { 
        fmt.Println(i) 
    } 
    for i, v := range s { 
        fmt.Println(i, v) 
    } 
 
    // 遍歷字典 
    m := map[string]int{"a": 10, "b": 20, "c": 30} 
    for k := range m { 
        fmt.Println(k) 
    } 
    for k, v := range m { 
        fmt.Println(k, v) 
    } 
}
goto,break,continue
goto 特點:
  1. 只能在函式內跳轉,需要配合標籤一起使用;
  1. 不能跳過內部變數宣告語句;
  1. 只能跳到同級作用域或者上層作用域內,不能跳到內部作用域內。
package main 
 
import ( 
    "fmt" 
) 
 
func main() { 
    // 跳出迴圈 
    for i := 0; ; i++ { 
        if i == 2 { 
            goto L1 
        } 
        fmt.Println(i) 
    } 
L1: 
    fmt.Println("Done") 
 
    // 跳過變數宣告,不允許 
    //  goto L2 
    //  j := 1 
    // L2: 
}
break 特點:
  1. 單獨使用,用於跳出 break 當前所在的 for、 switch、 select 語句的執行;
  1. 和標籤一起使用,用於跳出標籤所標識的 for、 switch、 select 語句的執行,可用於跳出多重迴圈,但標籤和 break 必須在同一個函式內。
package main 
 
import ( 
    "fmt" 
) 
 
func main() { 
    // break 跳轉到標籤處,然後跳過 for 迴圈 
L3: 
    for i := 0; ; i++ { 
        for j := 0; ; j++ { 
            if i >= 2 { 
                break L3 
            } 
            if j > 4 { 
                break 
            } 
            fmt.Println(i, j) 
        } 
    } 
}
continue 特點:
  1. 單獨使用,用於跳出 continue 當前所在的 for 迴圈的本次迭代;
  1. 和標籤一起使用,用於跳出標籤所標識的 for 語句的本次選代,但標籤和 continue 必須在同一個函式內。
package main 
 
import ( 
    "fmt" 
) 
 
func main() { 
    // continue 跳轉到標籤處,然後執行 i++ 
L4: 
    for i := 0; ; i++ { 
        for j := 0; j < 6; j++ { if i > 4 { 
                break L4 
            } 
            if i >= 2 { 
                continue L4 
            } 
            if j > 4 { 
                continue 
            } 
            fmt.Println(i, j) 
        } 
    } 
}
總結

本文主要介紹了流程控制語句,分別是條件語句,選擇語句,迴圈語句和跳轉語句。

  1. 條件語句: 對應關鍵詞 if,else 和 else if;
  1. 選擇語句: 對應關鍵詞 switch,case,fallthrough 和 default;
  1. 迴圈語句: 對應關鍵詞 for 和 range;
  1. 跳轉語句: 對應關鍵詞 goto。

除此之外,還有 break 和 continue,都可以搭配迴圈語句和跳轉語句使用。跳轉語句在某些場景下會非常實用,但也很容易出現一些莫名其妙的問題,所以使用起來要更謹慎些。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2787260/,如需轉載,請註明出處,否則將追究法律責任。

相關文章