跳到主要内容

Go语言的switch语句

提示
  1. Switch 语句的基本用法:Go 中的 switch 语句允许从多个代码块中选择一个执行。它根据表达式的结果匹配相应的 case,若无匹配则执行 default 代码块。
  2. Switch 语句的附加特性:Go 的 switch 语句不需要每个 case 后使用 break,因为它会在匹配到第一个 case 后自动退出。使用 fallthrough 可以强制执行后续的 case
  3. 多重案例和无表达式 Switchswitch 可以在一个 case 中处理多个值。另外,如果不使用表达式,switch 默认为 true,允许基于布尔逻辑决定执行哪个 case

在 Go 中,switch 语句允许我们在多个选择中执行一个代码块。

语法

switch expression {
case 1:
// 代码块 1

case 2:
// 代码块 2

case 3:
// 代码块 3
...
...

default:
// 默认代码块
}

switch 关键字之后的表达式被评估。如果 expression 的结果等于

  • case 1 - 执行 代码块 1
  • case 2 - 执行 代码块 2
  • case 3 - 执行 代码块 3

如果没有匹配项,则执行 默认代码块

注意:我们也可以用 if...else 语句代替 switch。但是,switch 的语法更清晰、更容易编写。

Switch 语句的流程图

Go 中 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("不是二月")
}
}

输出

是二月

在上述示例中,switch 没有表达式。因此,该语句为 true

Go 中的可选语句 switch

在 Golang 中,我们还可以在表达式中使用可选语句。语句和表达式用分号隔开。例如,

// 程序:使用可选语句检查一周的某天

package main
import "fmt"

func main() {

// 带有语句的 switch
switch day := 4; day {

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("无效的天!")
}
}

输出

星期三

在上述示例中,我们使用了可选语句 day := 4 以及表达式 day。它匹配了 case 4,因此打印了 星期三