探索 Go 语言中的多分支选择语句:switch

99 阅读3分钟

前言

当你需要在不同情况下执行不同的代码块时,Go 语言中的 switch 多分支选择语句是一种非常有用的工具。它类似于其他编程语言中的 switch 语句,但在 Go 中有一些独特的特性。以下是关于 Go 中 switch 语句的介绍。

内容

1. 基本语法结构

switch 语句用于根据一个表达式的值,选择性地执行多个可能的代码块。基本的语法结构如下:

switch expression {
case value1:
    // 执行当 expression 等于 value1 时的代码块
case value2:
    // 执行当 expression 等于 value2 时的代码块
// ...
default:
    // 如果没有匹配的情况,执行默认的代码块
}

在这个结构中,expression 是要进行匹配的表达式,value1value2 等是不同的可能匹配值。case 后面的值将与 expression 进行比较,如果匹配,则执行相应的代码块。如果没有任何一个 case 匹配,那么会执行 default 块中的代码。default 是可选的,你可以根据需要选择是否包含它。

举一个例子:

package main

import "fmt"

func main() {
    i := 2
    fmt.Print("write ", i, " as ")
    switch i {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    }
}

在这个示例中,我们有一个基本的 switch 语句,根据变量 i 的值选择不同的输出。

2. 默认自动 break

值得注意的是,与其他编程语言不同,Go 的 switch 语句中不需要显式地使用 break 来终止每个 case 块。每个 case 块执行完毕后会自动终止,不会继续执行下一个 case 块。

如果想要在匹配成功后继续执行其他条件的代码块,可以使用 fallthrough 关键字。

3. 没有条件的 switch

switch 语句中,可以省略表达式,此时 switch 将被视为多个 if-else 语句的替代方式。

package main

import "fmt"

func main() {
    num := 6

    switch {
    case num < 0:
        fmt.Println("Negative")
    case num == 0:
        fmt.Println("Zero")
    case num > 0:
        fmt.Println("Positive")
    }
}

可以看到,在这种情况下,每个 case 后面没有具体的值,而是一个布尔表达式。当其中一个表达式的值为真时,相应的代码块将会执行。这相当于实现了类似于 if-else 的逻辑。

4. 多条件匹配

package main

import (
    "fmt"
    "time"
)

func main() {
    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("it's the weekend")
    default:
        fmt.Println("it's a weekday")
    }
}

这个示例展示了如何在一个 case 语句中使用逗号分隔的多个条件,以及如何使用 default 分支处理其他情况。

总结

总结起来,Go 语言中的 switch 多分支选择语句是一种强大的工具,用于根据不同的表达式值选择性地执行多个代码块。其基本语法结构包括在不同的 case 分支中匹配表达式的值,并执行相应的代码块,而无需显式添加 break。此外,Go 中的 switch 语句还支持省略表达式的形式,相当于多个 if-else 语句的替代,使得代码更加简洁。同时,通过在 case 语句中使用逗号分隔的多个条件,可以实现多条件匹配,而 default 分支则用于处理其他情况。