当前位置: 首页 > 工具软件 > Go Switch > 使用案例 >

Go 语言 switch 的使用

通令
2023-12-01

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范围更广。
 类似资料: