Go語言switch語句
switch語句可以讓一個變量對反對值的列表平等進行測試。每個值被稱為一個的情況(case),變量被接通檢查每個開關盒(switch case)。
在Go編程,switch有兩種類型。
-
表達式Switch - 在表達式switch,case包含相比較,switch表達式的值。
-
類型Switch - 在這類型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。
-
可以有任意數量的case語句在switch內。每個case後跟值進行比較,以及一個冒號。
-
constant-expression 的情況,必須是相同的數據類型,在switch的變量,它必須是一個常量或文字。
-
當變量被接通等於case的值,以下case中將執行語句。在case語句中break不是必需。
-
switch語句可以有一個可選默認情況下,它必須出現在開關結束。缺省情況下,可用於執行任務時冇有的case為true。則case在默認情況下也不是必須的。
流程圖:
例子:
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 ); }
當上述代碼被編譯和執行時,它產生了以下結果:
Well done 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語句中使用必須有接口的變量表達式{}輸入。
-
在switch內可以有任意數量case語句。每一種case後跟的值進行比較,以及一個冒號。
-
case的類型必須是相同的數據類型,在switch的變量,它必須是一個有效的數據類型。
-
當變量被接通等於某一case中的值,以下case語句將執行。在case語句塊的break不是必需的。
-
switch語句可以有一個可選默認case,它必須出現在switch的結束。缺省情況下,可用於執行任務時冇有匹配case時。default不是必需的。
例子:
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>