选择结构 switch
优质
小牛编辑
149浏览
2023-12-01
和 C 语言不同的的是
- 和if一样,表达式前面可以添加初始化语句
- 和if一样,不需要编写圆括号
- 和if一样,左大括号必须和表达式在同一行
- case 表达式的值不一定要是常量,甚至可以不用传递
- 一个 case 后面可以有多个表达式,满足其中一个就算匹配
- case 后面不需要添加 break
- 可以在 case 语句块最后添加 fallthrough,实现 case 穿透
- case 后面定义变量不需要添加 {} 明确范围
格式
switch 初始化语句; 表达式{ case 表达式1, 表达式2: 语句块; case 表达式1, 表达式2: 语句块; default: 语句块; }
package main import "fmt" func main() { switch num := 3;num { case 1: fmt.Println("星期一") case 2: fmt.Println("星期二") case 3: fmt.Println("星期三") case 4: fmt.Println("星期四") case 5: fmt.Println("星期五") case 6: fmt.Println("星期六") case 7: fmt.Println("星期日") default: fmt.Println("Other...") } }
package main import "fmt" func main() { switch num := 3;num { case 1,2,3,4,5: fmt.Println("工作日") case 6,7: fmt.Println("非工作日") default: fmt.Println("Other...") } }
注意点:
- case 后面不用编写 break,不会出现 case 穿透问题
- 如果想让 case 穿透,必须在 case 语句块最后添加 fallthrough 关键
package main import "fmt" func main() { switch num := 3;num { case 1: fallthrough case 2: fallthrough case 3: fallthrough case 4: fallthrough case 5: fmt.Println("工作日") case 6: fallthrough case 7: fmt.Println("非工作日") default: fmt.Println("Other...") } }
case 后面不仅仅可以放常量,还可以放变量和表达式
package main import "fmt" func main() { value := 2 switch num:=1; num { case value: // 变量 fmt.Println("num等于value") default: fmt.Println("num不等于value") } }
package main import "fmt" func main() { value := 2 switch num:=1; num { case getValue(): // 函数 fmt.Println("num等于value") default: fmt.Println("num不等于value") } } func getValue() int { return 1 }
package main import "fmt" func main() { switch num:=18; { case num >=0 && num <=10: // 表达式 fmt.Println("num是一个0~10之间的数") case num >10 && num <=20: fmt.Println("num是一个11~20之间的数") default: fmt.Println("num是一个大于20的数") } }
case 后面定义变量不用添加 {} 明确作用于范围
package main import "fmt" func main() { switch num := 1;num { case 1: value := 10 // 不会报错 fmt.Println(value) default: fmt.Println("Other...") } }
其它特性和 C 语言一样