Go语言的switch语句
提示
- Switch 语句的基本用法:Go 中的
switch
语句允许从多个代码块中选择一个执行。它根据表达式的结果匹配相应的case
,若无匹配则执行default
代码块。 - Switch 语句的附加特性:Go 的
switch
语句不需要每个case
后使用break
,因为它会在匹配到第一个case
后自动退出。使用fallthrough
可以强制执行后续的case
。 - 多重案例和无表达式 Switch:
switch
可以在一个case
中处理多个值。另外,如果不使用表达式,switch
默认为true
,允许基于布尔逻辑决定执行哪个case
。
在 Go 中,switch
语句允许我们在多个选择中执行一个代码块。
语法
switch expression {
case 1:
// 代码块 1
case 2:
// 代码块 2
case 3:
// 代码块 3
...
...
default:
// 默认代码块
}
在 switch
关键字之后的表达式被评估。如果 expression
的结果等于
case 1
- 执行 代码块 1case 2
- 执行 代码块 2case 3
- 执行 代码块 3
如果没有匹配项,则执行 默认代码块。
注意:我们也可以用 if...else
语句代替 switch
。但是,switch
的语法更清晰、更容易编写。
Switch 语句的流程图
示例:Golang 中的 switch case
// 使用 switch case 打印星期几的程序
package main
import "fmt"
func main() {
dayOfWeek := 3
switch dayOfWeek {
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("无效的日期")
}
}
输出
星期二
在上面的例子中,我们将 3
分配给了 dayOfWeek
变量。现在,变量与每个 case 语句的值进行比较。
由于值与 case 3
匹配,所以执行了 case 内的语句 fmt.Println("星期二")
。
注意:与 C 和 Java 等其他编程语言不同,我们不需要在每个 case 之后使用 break
。这是因为在 Go 中,switch
语句在第一个匹配的 case 之后就结束了。
Go 中带有 fallthrough 的 switch case
如果我们需要在匹配的 case 之后执行其他 case,我们可以在 case 语句中使用 fallthrough
。例如,
// 使用 switch 中的 fallthrough 打印星期几的程序
package main
import "fmt"
func main() {
dayOfWeek := 3
switch dayOfWeek {
case 1:
fmt.Println("星期日")
case 2:
fmt.Println("星期一")
case 3:
fmt.Println("星期二")
fallthrough
case 4:
fmt.Println("星期三")
case 5:
fmt.Println("星期四")
case 6:
fmt.Println("星期五")
case 7:
fmt.Println("星期六")
default:
fmt.Println("无效的日期")
}
}
输出
星期二
星期三
在上面的例子中,switch 表达式与 case 3
匹配,因此打印了 星期二
。然而,即使 case 不匹配,星期三
也被打印。
这是因为我们在 case 3
中使用了 fallthrough
。
Go 中具有多个 case 的 switch
我们也可以在单个 case 块内使用多个值。在这种情况下,如果表达式与某个 case 值匹配,该 case 块将被执行。
让我们看一个例子,
// 程序:检查日期是否为周末或工作日
package main
import "fmt"
func main() {
dayOfWeek := "Sunday"
switch dayOfWeek {
case "Saturday", "Sunday":
fmt.Println("周末")
case "Monday","Tuesday","Wednesday","Thursday","Friday":
fmt.Println("工作日")
default:
fmt.Println("无效的日期")
}
}
输出
周末
在上述示例中,我们为每个 case 使用了多个值:
- case "Saturday", "Sunday" - 如果 dayOfWeek 是 Saturday 或 Sunday 时执行
- case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" - 如果 dayOfWeek 是其中任一值时执行
Golang 中不带表达式的 switch
在 Go 中,switch 中的表达式是可选的。如果我们不使用表达式,则 switch 语句默认为 true
。例如,
// 程序:使用不带表达式的 switch 检查是否为二月
package main
import "fmt"
func main() {
numberOfDays := 28
// 不带任何表达式的 switch
switch {
case 28 == numberOfDays:
fmt.Println("是二月")
default:
fmt.Println("不是二月")
}
}