位置:首頁 > 高級語言 > Go語言教學 > Go語言switch語句

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在默認情況下也不是必須的。

流程圖:

switch statement in Go

例子:

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>