C語言中文網 目錄
首頁 > Go語言教程 > 流程控制 閱讀:3,575

Go語言switch case語句

分支選擇可以理解為一種批量的if語句,使用 switch 語句可方便地對大量的值進行判斷。

Go 語言中的 switch,不僅可以基于常量進行判斷,還可以基于表達式進行判斷。

提示

C/C++ 語言中的 switch 語句只能支持數值常量,不能對字符串、表達式等復雜情況進行處理,這么設計的主要原因是性能。C/C++ 的 switch 可以根據 case 的值作為偏移量直接跳轉代碼,在性能敏感代碼處,這樣做顯然是有好處的。

到了 Go 語言的時代,語言的運行效率并不能直接決定最終的效率,I/O 效率現在是最主要的問題。因此,Go 語言中的 switch 語法設計盡量以使用方便為主。

基本寫法

Go 語言改進了 switch 的語法設計,避免人為造成失誤。Go 語言的 switch 中的每一個 case 與 case 間是獨立的代碼塊,不需要通過 break 語句跳出當前 case 代碼塊以避免執行到下一行。示例代碼如下:
var a = "hello"
switch a {
case "hello":
    fmt.Println(1)
case "world":
    fmt.Println(2)
default:
    fmt.Println(0)
}
代碼輸出如下:
1

上面例子中,每一個 case 均是字符串格式,且使用了 default 分支,Go 語言規定每個 switch 只能有一個 default 分支。

1) 一分支多值

當出現多個 case 要放在一起的時候,可以像下面代碼這樣寫:
var a = "mum"
switch a {
case "mum", "daddy":
    fmt.Println("family")
}
不同的 case 表達式使用逗號分隔。

2) 分支表達式

case 后不僅僅只是常量,還可以和 if 一樣添加表達式,代碼如下:
var r int = 11
switch {
case r > 10 && r < 20:
    fmt.Println(r)
}
注意,這種情況的 switch 后面不再跟判斷變量,連判斷的目標都沒有了。

跨越case的fallthrough——兼容C語言的case設計

在 Go 語言中 case 是一個獨立的代碼塊,執行完畢后不會像C語言那樣緊接著下一個 case 執行。但是為了兼容一些移植代碼,依然加入了 fallthrough 關鍵字來實現這一功能,代碼如下:
var s = "hello"
switch {
case s == "hello":
    fmt.Println("hello")
    fallthrough
case s != "world":
    fmt.Println("world")
}
代碼輸出如下:
hello
world

新編寫的代碼,不建議使用 fallthrough。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo