golang | switch-case


前言

  • switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。
  • switch 语句执行的过程从上至下,直到找到匹配项。
  • switch 默认情况下 case 最后自带 break 语句,所以不需要再额外添加,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough

语法

switch exp {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

demo

var exp = 2
switch exp {
case 1:
	fmt.Println("匹配到 1")
case 2:
	fmt.Println("匹配到 2")
case 3:
	fmt.Println("匹配到 3")
case 4:
	fmt.Println("匹配到 4")
}

// 匹配到 2

详解

  • switch常见用法就是通过判断表达式exp 是否满足case中的条件,如果满足就执行case 后的动作,如果不满足,继续判断,直到找到满足的case
var exp = 2
switch exp {
case 1:
   fmt.Println("匹配到 1")
case 2:
   fmt.Println("匹配到 2")
case 3:
   fmt.Println("匹配到 3")
case 4:
   fmt.Println("匹配到 4")
}

// 匹配到 2
  • 如果所有的case都没有匹配到,则switch 中的动作 都不会被执行
var exp = 5
var val = 0
switch exp {
case 1:
	val = 1
	fmt.Println("匹配到 1")
case 2:
	val = 2
	fmt.Println("匹配到 2")
case 3:
	val = 3
	fmt.Println("匹配到 3")
case 4:
	val = 4
	fmt.Println("匹配到 4")
}
fmt.Println("val 的值为 :", val)

// val 的值为 : 0
  • 如果所有的case都不满足,可以配置默认动作,默认动作配置到default
var exp = 5
switch exp {
case 1:
	fmt.Println("匹配到 1")
case 2:
	fmt.Println("匹配到 2")
case 3:
	fmt.Println("匹配到 3")
case 4:
	fmt.Println("匹配到 4")
default:
	fmt.Println("没有匹配到...")

// 没有匹配到...	
  • 如果一个case后需要写多个条件,则通过条件1,条件2...语法实现即可
var exp = 2
switch exp {
case 1:
   fmt.Println("匹配到 1")
case 2,3,4:
   fmt.Println("匹配到 2")
}

// 匹配到 2
  • 如果匹配到指定case后,执行完该case后的动作,希望能执行相邻的下一个case后的动作,则通过fallthrough 可以实现。每一个fallthrough可以实现一次穿透动作,不管下边的case条件是否满足
var exp = 2
switch exp {
case 1:
	fmt.Println("匹配到 1")
case 2:
	fmt.Println("匹配到 2")
	fallthrough
case 3:
	fmt.Println("匹配到 3")
case 4:
	fmt.Println("匹配到 4")
}

// 匹配到 2
// 匹配到 3
  • 如果想穿透多个case,则可以再每个case动作后都添加一个fallthrough关键字
var exp = 2
switch exp {
case 1:
	fmt.Println("匹配到 1")
case 2:
	fmt.Println("匹配到 2")
	fallthrough
case 3:
	fmt.Println("匹配到 3")
	fallthrough
case 4:
	fmt.Println("匹配到 4")
}

// 匹配到 2
// 匹配到 3
// 匹配到 4
  • 如果需要处理多表达式,例如 表达式1 == true 执行动作1,表达式2 == true 执行动作2 … ,可以通过以下语法实现:
switch  {
case exp1:
	action1
case exp2:
	action2

... ... 
default :
	actionN 
}

例如:

switch {
case 2 > 3:
	fmt.Println("2 > 3")
case 3 > 4:
	fmt.Println("3 > 4")
case 2 < 3:
	fmt.Println("2 < 3")
case 4 > 5:
	fmt.Println("4 > 5")
}

// 2 < 3

前边提到的规则fallthrough关键字,对这种情况也同样生效

  • swtich还可以做interface{}变量类型判断,例如接口传参为interface{}类型,或是第三方接口返回变量为interface{}类型等
var i interface{} = 0
switch i.(type) {
case int:
	fmt.Println("int")
case string:
	fmt.Println("string")
}

// int

总结

switch语句为golang中常用的分支语句,熟练掌握其语法特性在后续的研发工作中,会避免很多不必要的麻烦,同时针对一些特殊场景,swtich语句的特性也许会起到意向不到的作用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值