带 `fallthrough` 的 `switch`
本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 1 课,共 68 课。
在 Go 中,switch 语句通常只会执行匹配的 case,然后自动退出。不过,fallthrough 关键字会改变这种行为,强制程序继续执行下一个 case,无论它是否匹配。
在 case 末尾使用 fallthrough 时,Go 会执行下一个 case 的代码,而不检查它的条件。这与 C 这类语言不同,在这些语言中,你需要使用 break 来防止继续执行下一个 case。
grade := "B"
switch grade {
case "A":
fmt.Println("Excellent!")
fallthrough
case "B":
fmt.Println("Good job!")
fallthrough
case "C":
fmt.Println("Keep trying!")
}在这个示例中,如果 grade 的值是 "B",由于 fallthrough 语句,程序会同时打印 "Good job!" 和 "Keep trying!"。这样,你就可以在一个匹配的 case 中执行多个相关操作。
挑战
简单在这个挑战中,你将练习在 switch 语句中使用 fallthrough 关键字,创建一个优先级警报系统。触发高优先级警报时,系统应依次显示多条警告消息。
你会收到一个表示警报级别的字符串输入。创建一个 switch 语句来处理不同的警报级别,并使用 fallthrough 为更高优先级的警报显示逐级追加的消息。
输入将是以下警报级别之一:"critical"、"high"、"medium" 或 "low"。
你的 switch 语句应按以下方式运行:
- 对于
"critical":打印 "CRITICAL: System shutdown imminent!",然后 fall through 到 high 分支(该分支会继续 fall through 到 medium 分支) - 对于
"high":打印 "HIGH: Immediate attention required!",然后继续 fall through,同时打印 medium 优先级消息 - 对于
"medium":打印 "MEDIUM: Please review when possible" - 对于
"low":打印 "LOW: Informational only"
由于 fallthrough 会形成链式执行,"critical" 警报会打印三行(CRITICAL、HIGH、MEDIUM),"high" 警报会打印两行(HIGH、MEDIUM),而 "medium" 和 "low" 各打印一行。
亲手试试
package main
import "fmt"
func main() {
// 读取输入
var alertLevel string
fmt.Scanln(&alertLevel)
// TODO:在下方编写你的代码
// 为警报系统创建一个使用 fallthrough 的 switch 语句
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Go 在线编译器