Go 語言 switch 的使用

Go 語言 switch 的使用

一、基本介紹:

  1. switch 語句 基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上到下執行,直到匹配爲止。
  2. 匹配項後面不需要加 break

基本語法

switch 表達式 {

​ case 表達式1,表達式2,…:

​ 語句塊1

​ case 表達式3,表達式4:

​ 語句塊2

​ default:

​ 語句塊3

}

switch 大體流程

  1. 先執行表達式,得到值,和 case 表達式進行比較,如果匹配到,就執行 case 的語句塊,然後退出 switch 控制;
  2. 若 switch 的表達式值,沒有和任何 case 的表達式匹配成功,執行 default 語句塊,然後退出 switch 控制;
  3. go 中 case 後的表達式可以有多個,使用 逗號隔開
  4. go 中 case 語句塊不需要寫break,因爲默認會有;

簡單舉個栗子

  • 輸入一個字符,跟對應的字符進行匹配,輸出不同的結果:

    package main
    
    import (
    	"fmt"
    )
    
    func main(){
    	// 1.定義一個變量接收字符
    	// 2.使用switch 完成
    	var key byte
    	fmt.Println("輸入a, b, c, d字符, 進行匹配")
    	fmt.Scanf("%c", &key)
    	switch key {
    		case 'a':
    			fmt.Println("輸入的是a")
    		case 'b':
    			fmt.Println("輸入的是b")
    		case 'c':
    			fmt.Println("輸入的是c")
    		case 'd':
    			fmt.Println("輸入的是d")
    		default:
    			fmt.Println("輸入超出範圍")
    	}
    }	
    

二、使用細節、注意事項:

  1. case/switch 後是一個表達式(即:常量值、變量、一個有返回值的函數等都可以):

    // 寫一個簡單的函數
    func test(char byte) byte{
    	return char
    }
    func main(){
    	var key byte
    	fmt.Println("輸入a,b,c,d 對應獲取不同的結果")
    	fmt.Scanf("%c", &key)
    
    	// case/switch 後面可以是一個有返回值的函數
    	switch test(key) {
    		case 'a':
    			fmt.Println("輸入的是a")
    		case 'b':
    			fmt.Println("輸入的是b")
    		case 'c':
    			fmt.Println("輸入的是c")
    		case 'd':
    			fmt.Println("輸入的是d")
    		default:
    			fmt.Println("輸入超出範圍")
    	}
    }	
    
  2. case 後 的表達式的值數據類型,必須和 switch 表達式數據類型一致

     func main(){
     	var i int32
     	var j int64
     	// switch 後面表達式 跟case後面表達式 數據類型不同 錯誤示範
     	switch i {
     		case j:
     			fmt.Println("ok")
     		default:
     			fmt.Println("輸出default裏面內容")
     	}
     }	
    
  3. case 後面可以跟多個表達式,使用逗號隔開

    func main(){
    	var i int32
    	var j int32
    	var k int32
    	// case 後面可以跟多個表達式, 使用逗號隔開
    	switch i {
    		case j, k, 10:
    			fmt.Println("ok")
    		default:
    			fmt.Println("輸出default裏面內容")
    	}
    }	
    
  4. case 後面的表達式,如果是常量值(字面值),要求不能重複

    func main(){
    	var n1 int32 = 5
    	var n2 int32 = 20
    	// 值 不能進行重複使用, 常量5已經使用 第二個case 則不能再次使用
    	switch n1 {
    		case n2, 5:
    			fmt.Println("ok1")
    		case 5:
    			fmt.Println("ok2")
    		default:
    			fmt.Println("輸出default裏面內容")
    	}
    }	
    
  5. case 後面 不需要帶 break

  6. default 語句並不是必須的

    func main(){
    	var n1 int32 = 5
    	var n2 int32 = 20
    	// default 語句並不是必有的
    	switch n1 {
    		case n2, 5:
    			fmt.Println("ok1")
    	}
    }	
    
  7. switch 後 可以不帶表達式,類似 if—else 分支來使用:

    func main(){
    	var n1 int32 = 5
    	// switch 語句後, 不需要跟表達式 類似 if --- else 分支
    	switch {
    		case n1 == 5:
    			fmt.Println("ok1")
    		case n1 == 10:
    			fmt.Println("ok2")
    		default:
    			fmt.Println("default")
    	}
    
    	var age int64 = 18
    	switch {
    		case age >= 18 && age < 60:
    			fmt.Println("成人票")
    		case age < 18 && age >= 15:
    			fmt.Println("青年票")
    		case age > 12 :
    			fmt.Println("兒童票")
    		default:
    			fmt.Println("是什麼票呢?")
    	}
    }	
    
  8. switch 後 也可以直接聲明、定義一個變量,分號結束不推薦使用

    func main(){
    	// switch 語句後,直接聲明、定義一個變量, 不推薦使用, 用分號結束
    	switch age:= 18;{
    		case age >= 18 && age < 60:
    			fmt.Println("成人票")
    		case age < 18 && age >= 15:
    			fmt.Println("青年票")
    		case age > 12 :
    			fmt.Println("兒童票")
    		default:
    			fmt.Println("是什麼票呢?")
    	}
    }	
    
  9. switch 穿透 fallthrough,如果在 case 語句後增加fallthrough,會繼續執行下一個 case,也叫switch 穿透

    
    func main(){
    	// switch fallthrough 的使用
    	var age int64 = 18
    	switch {
    		case age >= 18 && age < 60:
    			fmt.Println("成人票")
    			fallthrough
    		case age < 18 && age >= 15:
    			fmt.Println("青年票")
    		case age > 12 :
    			fmt.Println("兒童票")
    		default:
    			fmt.Println("是什麼票呢?")
    	}
    }	
    

三、switch 和 if 使用場景:

  1. 如果判斷具體數值不多,符合 整數、浮點數、字符、字符串 幾種類型。建議使用switch語句,高效簡潔。
  2. 區間判斷結果爲bool類型判斷,使用if範圍更廣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章