- Go 教程
- Go - 首頁
- Go - 概述
- Go - 環境設定
- Go - 程式結構
- Go - 基本語法
- Go - 資料型別
- Go - 變數
- Go - 常量
- Go - 運算子
- Go - 決策
- Go - 迴圈
- Go - 函式
- Go - 作用域規則
- Go - 字串
- Go - 陣列
- Go - 指標
- Go - 結構體
- Go - 切片
- Go - 範圍
- Go - 對映
- Go - 遞迴
- Go - 型別轉換
- Go - 介面
- Go - 錯誤處理
- Go 有用資源
- Go - 常見問題解答
- Go - 快速指南
- Go - 有用資源
- Go - 討論
Go - switch語句
switch 語句允許將變數與一系列值進行相等性測試。每個值稱為一個 case,系統會檢查正在進行切換的變數與每個switch case 是否相等。
在 Go 程式設計中,switch 語句有兩種型別:
表示式 switch - 在表示式 switch 中,case 包含表示式,這些表示式將與 switch 表示式的值進行比較。
型別 switch - 在型別 switch 中,case 包含型別,這些型別將與特殊註釋的 switch 表示式的型別進行比較。
表示式 switch
Go 程式語言中表示式 switch 語句的語法如下:
switch(boolean-expression or integral type){
case boolean-expression or integral type :
statement(s);
case boolean-expression or integral type :
statement(s);
/* you can have any number of case statements */
default : /* Optional */
statement(s);
}
switch 語句適用以下規則:
switch 語句中使用的表示式必須是整數或布林表示式,或者屬於某個類型別,其中該類具有單個轉換為整數或布林值的轉換函式。如果未傳遞表示式,則預設值為 true。
在一個 switch 中可以包含任意數量的 case 語句。每個 case 後面跟著要比較的值和一個冒號。
case 的常量表達式的資料型別必須與 switch 中的變數相同,並且必須是常量或字面量。
當正在進行切換的變數等於某個 case 時,該 case 後面的語句將執行。case 語句中不需要break。
switch 語句可以有一個可選的default case,它必須出現在 switch 的末尾。當沒有一個 case 為 true 時,可以使用 default case 來執行任務。default case 中不需要break。
流程圖
示例
package main
import "fmt"
func main() {
/* local variable definition */
var grade string = "B"
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A" :
fmt.Printf("Excellent!\n" )
case grade == "B", grade == "C" :
fmt.Printf("Well done\n" )
case grade == "D" :
fmt.Printf("You passed\n" )
case grade == "F":
fmt.Printf("Better try again\n" )
default:
fmt.Printf("Invalid grade\n" );
}
fmt.Printf("Your grade is %s\n", grade );
}
編譯並執行上述程式碼後,將產生以下結果:
Excellent! Your grade is A
型別 switch
Go 程式設計中型別 switch 語句的語法如下:
switch x.(type){
case type:
statement(s);
case type:
statement(s);
/* you can have any number of case statements */
default: /* Optional */
statement(s);
}
switch 語句適用以下規則:
switch 語句中使用的表示式必須是 interface{} 型別的變數。
在一個 switch 中可以包含任意數量的 case 語句。每個 case 後面跟著要比較的值和一個冒號。
case 的型別必須與 switch 中的變數的資料型別相同,並且必須是有效的資料型別。
當正在進行切換的變數等於某個 case 時,該 case 後面的語句將執行。case 語句中不需要 break。
switch 語句可以有一個可選的 default case,它必須出現在 switch 的末尾。當沒有一個 case 為 true 時,可以使用 default case 來執行任務。default case 中不需要 break。
示例
package main
import "fmt"
func main() {
var x interface{}
switch i := x.(type) {
case nil:
fmt.Printf("type of x :%T",i)
case int:
fmt.Printf("x is int")
case float64:
fmt.Printf("x is float64")
case func(int) float64:
fmt.Printf("x is func(int)")
case bool, string:
fmt.Printf("x is bool or string")
default:
fmt.Printf("don't know the type")
}
}
編譯並執行上述程式碼後,將產生以下結果:
type of x :<nil>