返回介绍

switch 语句

发布于 2024-10-12 12:51:54 字数 3105 浏览 0 评论 0 收藏 0

Go 语言中的 switch 语句是一种多分支选择结构,用于根据表达式的结果执行不同的代码块。与其他语言相比,Go 的 switch 语句功能更强大且更简洁,同时支持多种用法。以下是一些 Go 中 switch 语句的常见用法:

基本用法

package main

import "fmt"

func main() {
    i := 2
    switch i {
    case 1:
        fmt.Println("i is 1")
    case 2:
        fmt.Println("i is 2")
    case 3:
        fmt.Println("i is 3")
    default:
        fmt.Println("i is not 1, 2, or 3")
    }
}

解释

  • i 的值为 2 时,执行对应的 case 代码块并打印 i is 2
  • default 子句在没有任何匹配的 case 时执行,类似于其他语言的 else

多条件匹配

在 Go 中,你可以在一个 case 子句中匹配多个值:

package main

import "fmt"

func main() {
    i := 4
    switch i {
    case 1, 2, 3:
        fmt.Println("i is 1, 2, or 3")
    case 4, 5, 6:
        fmt.Println("i is 4, 5, or 6")
    default:
        fmt.Println("i is something else")
    }
}

解释

  • 如果 i 的值是 456 ,则会执行 case 4, 5, 6 的代码块。

无表达式的 switch

在 Go 中,你可以省略 switch 后的表达式,这时它会默认求值为 true ,可以用来替代多个 if-else 语句:

package main

import "fmt"

func main() {
    num := 10
    switch {
    case num < 0:
        fmt.Println("num is negative")
    case num == 0:
        fmt.Println("num is zero")
    case num > 0:
        fmt.Println("num is positive")
    }
}

解释

  • 这里的 switch 是基于布尔表达式来判断的,每个 case 子句只要条件成立,就会执行对应的代码块。

带初始化语句的 switch

Go 允许在 switch 语句中包含一个初始化语句,它在执行 switch 判断之前运行:

package main

import "fmt"

func main() {
    switch num := 5; {
    case num < 0:
        fmt.Println("num is negative")
    case num == 0:
        fmt.Println("num is zero")
    case num > 0:
        fmt.Println("num is positive")
    }
}

解释

  • 这里 num := 5 是初始化语句,它在 switch 语句开始之前被执行,然后再进行 case 的判断。

特点

  • 不需要显式的 break :Go 中的 switch 语句不需要显式的 break 语句。每个 case 在执行完后会自动退出 switch ,除非使用了 fallthrough 关键字。
  • fallthrough 关键字 :如果你希望在执行完一个 case 后继续执行下一个 case ,可以使用 fallthrough 关键字。
package main

import "fmt"

func main() {
    i := 2
    switch i {
    case 2:
        fmt.Println("i is 2")
        fallthrough
    case 3:
        fmt.Println("i is 3")
    }
}

解释

  • 即使 i2 ,由于 fallthrough 的存在,程序也会继续执行下一个 case ,因此会打印 i is 3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文