Switch-case
switch
語句用於基於不同條件執行不同動作,每一個 case
分支都是唯一的,從上直下逐一測試,直到匹配為止。 switch
分支表達式可以是任意類型,不限於常量。可省略 break
,默認自動終止。
Switch 語句
Go
語言中的 switch
結構使用上更加靈活。它接受任意形式的表達式:
import "fmt"
func main() {
k := 1
switch {
case k == 1:
fmt.Println("k = ",k)
case k == 2:
fmt.Println("k = ",k)
case k == 3:
fmt.Println("k = ",k)
default:
fmt.Println("default case")
}
}
上面這一種
Switch
語句其實和if-else
語句差不多。
import "fmt"
func main() {
k := 2
switch k {
case 1:
fmt.Println("k = ",k)
case 2:
fmt.Println("k = ",k)
case 3:
fmt.Println("k = ",k)
default:
fmt.Println("default case")
}
}
注意:case 后面的常量不可以重復
多個條件的case 語句
多個條件的 case
語句和單個沒有什么差別,只是選擇的范圍大了一點:
import "fmt"
func main() {
k := 4
switch k {
case 1, 2, 3:
fmt.Println("k = ",k)
case 4, 5, 6:
fmt.Println("k = ",k)
case 7, 8, 9:
fmt.Println("k = ",k)
default:
fmt.Println("default case")
}
}
所有的常量還是不可以重復
每一個 case
分支都是唯一的,從上至下逐一測試,直到匹配為止。
Go
語言使用快速的查找算法來測試 switch
條件與 case
分支的匹配情況,直到算法匹配到某個 case
或者進入 default
條件為止。
一旦成功地匹配到某個分支,在執行完相應代碼后就會退出整個 switch
代碼塊,也就是說您不需要特別使用 break
語句來表示結束。
Type Switch
switch
語句還可以被用於 type-switch
來判斷某個 interface
變量中實際存儲的變量類型。
例如:
import "fmt"
func main() {
var t interface{}
switch t.(type) {
case int:
fmt.Println("int")
case string:
fmt.Println("string")
case bool:
fmt.Println("bool")
case float64:
fmt.Println("float64")
default:
fmt.Println("default interface")
}
}
根據接口的類型來確定要執行的代碼。
Switch 穿透
如果在執行完每個分支的代碼后,還希望繼續執行后續分支的代碼,可以使用 fallthrough
關鍵字來達到目的。
fallthrough
只能穿透一層,意思是它讓你直接執行下一個 case
的語句,而且不需要判斷條件。
import "fmt"
func main() {
i := 3
switch i {
case 1, 2:
fmt.Println("1,2")
fallthrough
case 3, 4:
fmt.Println("3,4")
fallthrough
case 5, 6:
fmt.Println("5,6")
fallthrough
default:
fmt.Println("default case")
}
// 結果:
// 3,4
// 5,6
// default case
}
在
switch
語句中,只要遇到fallthrough
就會往一下個case
中穿透。
關注公眾號,隨時獲取最新資訊
細節決定成敗!
個人愚見,如有不對,懇請斧正!