switch
是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个if else
子句的常用方式。
switch var1 {
case val1:
...
case val2:
...
default:
...
}
变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。
func test1() {
// 常规switch语句
a := 1
switch a {
case 1:
fmt.Println("test1 a = 1")
case 2:
fmt.Println("test1 a = 2")
case 3:
fmt.Println("test1 a = 3")
}
}
在 switch
语句中,表达式是可选的,可以被省略。如果省略表达式,则表示这个 switch
语句等同于switch true
,并且每个case
表达式都被认定为有效,相应的代码块也会被执行。
func test4() {
// switch后面不接条件,条件放在case里面
a := 1
switch {
case a == 1:
fmt.Println("test4 a = 1")
case a == 2:
fmt.Println("test4 a = 2")
case a == 3:
fmt.Println("test4 a = 3")
default:
fmt.Println("test4 a不符合要求")
}
}
在 Go
中,每执行完一个 case
后,会从 switch
语句中跳出来,不再做后续 case
的判断和执行。使用fallthrough
语句可以在已经执行完成的 case
之后,把控制权转移到下一个 case
的执行代码中。
func test5() {
// fallthrough
a := 2
switch {
case a == 1:
fmt.Println("test5 a = 1")
case a == 2:
fmt.Println("test5 a = 2")
fallthrough
case a == 3:
fmt.Println("test5 a = 3")
default:
fmt.Println("test5 a不符合要求")
}
}
三、完整例子
package main
import "fmt"
func test1() {
// 常规switch语句
a := 1
switch a {
case 1:
fmt.Println("test1 a = 1")
case 2:
fmt.Println("test1 a = 2")
case 3:
fmt.Println("test1 a = 3")
}
}
func test2() {
// switch赋值和判断都放switch里面
switch a := 1; a {
case 1:
fmt.Println("test2 a = 1")
case 2:
fmt.Println("test2 a = 2")
case 3:
fmt.Println("test2 a = 3")
}
}
func test3() {
// 一个case里面包含两个结果
switch a := 5; a {
case 1:
fmt.Println("test3 a = 1")
case 2:
fmt.Println("test3 a = 2")
case 3, 4:
fmt.Println("test3 a = 3或4")
default:
fmt.Println("test3 a不符合要求")
}
}
func test4() {
// switch后面不接条件,条件放在case里面
a := 1
switch {
case a == 1:
fmt.Println("test4 a = 1")
case a == 2:
fmt.Println("test4 a = 2")
case a == 3:
fmt.Println("test4 a = 3")
default:
fmt.Println("test4 a不符合要求")
}
}
func test5() {
// fallthrough
a := 2
switch {
case a == 1:
fmt.Println("test5 a = 1")
case a == 2:
fmt.Println("test5 a = 2")
fallthrough
case a == 3:
fmt.Println("test5 a = 3")
default:
fmt.Println("test5 a不符合要求")
}
}
func main() {
test1()
test2()
test3()
test4()
test5()
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。