4.2 switch

本篇学习 Go switch 语句的区间判断、枚举匹配与 fallthrough 用法,并能根据场景选择合适写法。

字数 1134 字

switch 语句

概念说明

switch 用于多分支判断,适合“多选一”场景。
相比多层 if-elseswitch 在分支较多时通常更直观。

语法/规则

  1. switch 可以带表达式(如 switch week),也可以不带表达式(如 switch {})。
  2. case 按书写顺序匹配,命中第一个分支后默认结束,不会继续向下执行。
  3. default 是兜底分支,当前面的 case 都不满足时执行。
  4. 一个 case 可以匹配多个值,例如 case 6, 7:
  5. 如果希望命中后继续执行下一个分支,可使用 fallthrough
  6. fallthrough 会直接进入下一个 case,不会重新判断下一个 case 的条件。

区间判断示例(switch + 条件表达式)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func main() {
	fmt.Println("请输入你的年龄:")
	var age int
	fmt.Scan(&age)

	switch {
	case age <= 0:
		fmt.Println("未出生")
	case age <= 18:
		fmt.Println("未成年")
	case age <= 35:
		fmt.Println("青年")
	default:
		fmt.Println("中年")
	}
}

输出结果(输入 22):

1
2
3
请输入你的年龄:
22
青年

枚举值判断示例(switch + 变量)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import "fmt"

func main() {
	fmt.Println("请输入星期数字:")
	var week int
	fmt.Scan(&week)

	switch week {
	case 1:
		fmt.Println("周一")
	case 2:
		fmt.Println("周二")
	case 3:
		fmt.Println("周三")
	case 4:
		fmt.Println("周四")
	case 5:
		fmt.Println("周五")
	case 6, 7:
		fmt.Println("周末")
	default:
		fmt.Println("输入错误")
	}
}

输出结果(输入 6):

1
2
3
请输入星期数字:
6
周末

fallthrough 示例

默认情况下,switch 命中一个 case 后就结束。
如果你希望继续执行下一个分支,可以使用 fallthrough

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import "fmt"

func main() {
	fmt.Println("请输入你的年龄:")
	var age int
	fmt.Scan(&age)

	switch {
	case age <= 0:
		fmt.Println("未出生")
		fallthrough
	case age <= 18:
		fmt.Println("未成年")
		fallthrough
	case age <= 35:
		fmt.Println("青年")
	default:
		fmt.Println("中年")
	}
}

输出结果(输入 12):

1
2
3
4
请输入你的年龄:
12
未成年
青年

常见错误

  1. 误以为 switch 会自动“贯穿”到后续 case,实际上默认不会。
  2. switch {} 中把范围更大的条件写在前面,导致后面的分支永远匹配不到。
  3. 误解 fallthrough 行为,以为会再次判断下一个 case 条件。
  4. 枚举场景没有写 default,导致非法输入时没有明确提示。
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
载入天数...载入时分秒...
发表了 0 篇文章 · 发表了 31 篇笔记 · 总计 1 万 6 千字(其中笔记 16551 字)