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

流程圖

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 );      
}

編譯並執行上述程式碼後,將產生以下結果:

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>
go_decision_making.htm
廣告
© . All rights reserved.