Go 语言中的 Switch 语句详解


在 Go 语言中,switch 语句是一个多分支选择控制结构,用于根据表达式的值执行相应的代码块。相比于其他语言的 switch 语句,Go 语言的 switch 具有更高的灵活性和简洁性。下面详细介绍 Go 语言中的 switch 语句,包括其语法、使用方法和实例。

1. 基本语法

switch 语句的基本形式如下:

switch 表达式 {
case 值1:
    // 代码块
case 值2:
    // 代码块
default:
    // 代码块
}
  • 表达式:可以是任意类型的表达式。
  • case:后面跟一个值,当表达式的结果与这个值匹配时,执行对应的代码块。
  • default:可选,当没有任何 case 匹配时,执行 default 代码块。

2. 示例

2.1 基本使用

package main

import "fmt"

func main() {
    day := "Tuesday"
    switch day {
    case "Monday":
        fmt.Println("Start of the work week")
    case "Tuesday":
        fmt.Println("Second day of the work week")
    case "Wednesday":
        fmt.Println("Midweek")
    case "Thursday":
        fmt.Println("Almost the end of the work week")
    case "Friday":
        fmt.Println("Last work day of the week")
    default:
        fmt.Println("Weekend!")
    }
}

2.2 多个表达式匹配同一个 case

一个 case 可以有多个匹配值,使用逗号分隔:

package main

import "fmt"

func main() {
    day := "Saturday"
    switch day {
    case "Saturday", "Sunday":
        fmt.Println("Weekend!")
    default:
        fmt.Println("Weekday")
    }
}

2.3 没有表达式的 switch

当没有提供表达式时,switch 语句等价于 switch true,每个 case 都是一个独立的布尔表达式:

package main

import "fmt"

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

2.4 省略 switch 的初始化语句

switch 语句中,可以在 switch 关键字后面添加一个简单的语句,用于在评估表达式之前执行:

package main

import "fmt"

func main() {
    switch num := 10; {
    case num < 0:
        fmt.Println("Negative number")
    case num == 0:
        fmt.Println("Zero")
    case num > 0:
        fmt.Println("Positive number")
    }
}

2.5 fallthrough 关键字

在 Go 语言中,case 分支默认不自动向下执行。要显式地继续执行下一个 case,可以使用 fallthrough 关键字:

package main

import "fmt"

func main() {
    num := 2
    switch num {
    case 1:
        fmt.Println("One")
        fallthrough
    case 2:
        fmt.Println("Two")
        fallthrough
    case 3:
        fmt.Println("Three")
    default:
        fmt.Println("Other number")
    }
}

输出结果:

Two
Three
Other number

3. 类型开关(Type Switch)

类型开关用于对接口类型的变量进行类型判断:

package main

import "fmt"

func main() {
    var i interface{} = 10
    switch v := i.(type) {
    case int:
        fmt.Printf("Integer: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    default:
        fmt.Printf("Unknown type\n")
    }
}

4. 空 switch

switch 是一种特殊情况,switch 后面没有表达式,相当于 switch true,可以用来简化多个条件判断:

package main

import "fmt"

func main() {
    num := 7
    switch {
    case num%2 == 0:
        fmt.Println("Even number")
    case num%2 != 0:
        fmt.Println("Odd number")
    }
}

总结

Go 语言中的 switch 语句功能强大且灵活,可以用于多种场景下的条件判断。通过学习和掌握 switch 语句,可以编写出更加简洁和高效的代码。无论是基本的值匹配,还是复杂的类型判断,switch 都能提供有效的解决方案。


原文链接:codingdict.net