Go switch 语句详解📘

Go switch 语句详解📘

学习环境:Windows + GoLand 2025.1.3 + Go SDK 1.24 + CodeGeeX(模块开发模式)


一、学习目标 🎯

  1. 理解并掌握 Go 中 switch 语句的基本用法
  2. 学会在不同场景下使用 switch 进行多分支判断
  3. 掌握如何结合 case, fallthrough, default 实现复杂的逻辑控制
  4. 避免常见的错误,如忘记添加 break(虽然在 Go 中不需要手动添加)

二、核心重点 🔑

序号 类别 内容说明
1 基础概念 switch, case, default 的含义与用法
2 特殊用法 fallthrough 和类型断言结合 switch 使用
3 注意事项 不需要显式的 break;理解 fallthrough 的作用

三、详细讲解 📚

1. switch 语句基础 🧮

知识详解 📝

switch 语句提供了一种简洁的方式来处理多个条件分支的情况。它会依次检查每个 case 表达式是否匹配,并执行第一个匹配的代码块。

基本形式:
package main

import "fmt"

func main() {
	day := "Monday"
	switch day {
	case "Monday":
		fmt.Println("Today is Monday")
	case "Tuesday":
		fmt.Println("Today is Tuesday")
	default:
		fmt.Println("It's another day")
	}
}

注意点:

  • 每个 case 后面可以跟一个或多个表达式,使用逗号分隔;
  • 如果没有匹配的 case,则执行 default 分支;
  • Go 自动为每个 case 添加 break,所以无需手动编写。

2. 多表达式 case 💡

知识详解 📝

可以在 case 后指定多个值,当任意一个值匹配时都会执行对应的代码块。

示例代码:
package main

import "fmt"

func main() {
	score := 85
	switch score {
	case 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100:
		fmt.Println("Grade A")
	case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89:
		fmt.Println("Grade B")
	case 70, 71, 72, 73, 74, 75, 76, 77, 78, 79:
		fmt.Println("Grade C")
	default:
		fmt.Println("Need improvement")
	}
}

3. fallthrough 关键字 🛠️

知识详解 📝

fallthrough 可以强制执行下一个 case 的代码块,即使当前 case 已经匹配成功。

示例代码:
package main

import "fmt"

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

输出结果:

Two
Three

注意点:

  • fallthrough 必须放在每个 case 的最后一条语句;
  • fallthrough 不会跳过 default 分支。

4. switch 与初始化语句结合使用 🔄

知识详解 📝

可以在 switch 之后直接初始化变量,并且该变量的作用域仅限于 switch 语句内部及其子句中。

示例代码:
package main

import "fmt"

func main() {
	switch result := divide(10, 2); result {
	case -1:
		fmt.Println("Error: Division by zero")
	default:
		fmt.Printf("Result: %d\n", result)
	}
}

func divide(a, b int) int {
	if b == 0 {
		return -1
	}
	return a / b
}

5. switch 类型判断 🚀

知识详解 📝

除了比较基本类型的值外,switch 还可以用于类型判断。

示例代码:
package main

import "fmt"

func describe(i interface{}) {
	switch v := i.(type) {
	case int:
		fmt.Printf("Integer: %v\n", v)
	case string:
		fmt.Printf("String: %v\n", v)
	case bool:
		fmt.Printf("Boolean: %v\n", v)
	default:
		fmt.Printf("Unknown type: %T\n", v)
	}
}

func main() {
	describe(42)           // Integer: 42
	describe("Hello")      // String: Hello
	describe(true)         // Boolean: true
	describe([]int{1, 2})  // Unknown type: []int
}

注意点:

  • 使用 i.(type) 只能在 switch 语句中;
  • case 后面必须是具体的类型名。

6. 注意事项与常见错误 ❗

错误一:忘记添加 fallthrough

package main

import "fmt"

func main() {
	switch 2 {
	case 1:
		fmt.Println("One")
	case 2:
		fmt.Println("Two")
	case 3:
		fmt.Println("Three")
	default:
		fmt.Println("Unknown")
	}
}

正确行为: 输出 "Two" 而不是 "Two Three",因为默认情况下不会自动执行下一个 case


错误二:尝试在非 switch 语句中使用 fallthrough

package main

import "fmt"

func main() {
	if true {
		fmt.Println("True")
		fallthrough // 编译错误:fallthrough statement out of place
	}
}

正确做法: fallthrough 只能在 switch 语句中使用。


错误三:类型断言中的 switch 语法错误

package main

import "fmt"

func main() {
	var i interface{} = "hello"
	switch v := i.(type) {
	case int:
		fmt.Println(v)
	case string
		fmt.Println(v) // 编译错误:missing ',' before newline in case list
	}
}

正确做法:case 后面加上逗号 ,


四、总结 ✅

内容项 说明
基础概念 switch 提供了简洁的多分支选择机制,支持多个 case 条件和 default 默认分支
特殊用法 fallthrough 可用于强制执行下一个 case 的代码块;支持类型断言结合 switch 使用
注意事项 Go 自动为每个 case 添加 breakfallthrough 必须位于 case 的最后一行;注意类型断言的语法正确性

🎉 恭喜你完成了《Go switch 语句详解》的学习!
你现在掌握了 Go 中 switch 语句的所有重要特性和应用场景,能够熟练运用 switch 来简化条件逻辑的编写。无论是简单的数值判断还是复杂的类型判断,都能更加得心应手!


📌 下一步推荐学习:

  • 《Go 循环语句详解》
  • 《Go 错误处理机制》
  • 《Go 并发编程基础》

需要我继续输出这些内容吗?😊

posted @ 2025-06-30 23:02  红尘过客2022  阅读(28)  评论(0)    收藏  举报