【基本流程控制】2. switch語句

Go語言-switch語句

    與串聯的if語句相似,switch語句提供了一個多分支條件執行的方法。不過在這裏用一個專有名詞來表明分支——case。每個case能夠攜帶一個表達式或一個類型說明符。前者又可被簡稱爲case表達式。所以,Go語言的switch語句又分爲表達式switch語句和類型switch語句。
  
    先說表達式switch語句。在此類switch語句中,每一個case會攜帶一個表達式。與if語句中的條件表達式不一樣,這裏的case表達式的結果類型並不必定是bool。不過,它們的結果類型須要與switch表達式的結果類型一致。所謂switch表達式是指switch語句中要被斷定的那個表達式。switch語句會依據該表達式的結果與各個case表達式的結果是否相同來決定執行哪一個分支。請看下面的示例:ui

var name string
// 省略若干條語句
switch name {
case "Golang":
    fmt.Println("A programming language from Google.")
case "Rust":
    fmt.Println("A programming language from Mozilla.")
default:
    fmt.Println("Unknown!")
}

    能夠看到,在上述switch語句中,name充當了switch表達式,而"Go""Rust"充當了case表達式。它們的結果類型是一致的,都是string。順便說一句,能夠有隻包含一個字面量或標識符的表達式。它們是最簡單的表達式,屬於基本表達式的一種。
  
    請你們注意switch語句的寫法。switch表達式必須緊隨switch關鍵字出現。在後面的花括號中,一個關鍵字casecase表達式、冒號以及後跟的若干條語句組成爲一條case語句。在switch語句中能夠有若干條case語句。Go語言會依照從上至下的順序對每一條case語句中case表達式進行求值。只要被發現其表達式與switch表達式的結果相同,該case語句就會被選中。它包含的那些語句就會被執行。而其他的case語句則會被忽略。
  
    switch語句中還能夠存在一個特殊的case——default case。顧名思義,當沒有一個常規的case被選中的時候,default case就會被選中。上面示例中就存在一個default case。它由關鍵字default、冒號和後跟的一條語句組成。實際上,default case不必定被追加在最後。它能夠是第一個case,或者出如今任意順位上。
  
    另外,與if語句同樣,switch語句還能夠包含初始化子句,且其出現位置和寫法也一模一樣。如:spa

names := []string{"Golang", "Java", "Rust", "C"}
switch name := names[0]; name {
case "Golang":
    fmt.Println("A programming language from Google.")
case "Rust":
    fmt.Println("A programming language from Mozilla.")
default:
    fmt.Println("Unknown!")
}

    好了,咱們已經對switch語句的通常形式——表達式switch語句——有所瞭解了。下面咱們來講說類型switch語句。它與通常形式有兩點差異。第一點,緊隨case關鍵字的不是表達式,而是類型說明符。類型說明符由若干個類型字面量組成,且多個類型字面量之間由英文逗號分隔。第二點,它的switch表達式是很是特殊的。這種特殊的表達式也起到了類型斷言的做用,但其表現形式很特殊,如:v.(type),其中v必須表明一個接口類型的值。注意,該類表達式只能出如今類型switch語句中,且只能充當switch表達式。一個類型switch語句的示例以下:code

v := 11
switch i := interface{}(v).(type) {
case int, int8, int16, int32, int64:
    fmt.Printf("A signed integer: %d. The type is %T. \n", i, i)
case uint, uint8, uint16, uint32, uint64:
    fmt.Printf("A unsigned integer: %d. The type is %T. \n", i, i)
default:
    fmt.Println("Unknown!")
}

    請注意,咱們在這裏把switch表達式的結果賦給了一個變量。如此一來,咱們就能夠在該switch語句中使用這個結果了。這段代碼被執行後,標準輸出上會打印出A signed integer: 11. The type is int.
   
    最後,咱們來講一下fallthrough。它既是一個關鍵字,又能夠表明一條語句。fallthrough語句可被包含在表達式switch語句中的case語句中。它的做用是使控制權流轉到下一個case。不過要注意,fallthrough語句僅能做爲case語句中的最後一條語句出現。而且,包含它的case語句不能是其所屬switch語句的最後一條case語句。接口

相關文章
相關標籤/搜索