当前位置: 首页 > news >正文

【go】switch用法梳理与总结

Go 语言的 switch 语句是一种强大的多分支控制结构,比 C/C++/Java 中的 switch 更灵活,支持表达式匹配、类型断言、无表达式匹配(类似 if-else 链)等特性。下面我们详细介绍 switch 的各种用法,并附上代码示例。

一、基本 switch 语句

基本语法:

switch 表达式 {
case1:// 执行语句
case2:// 执行语句
default:// 默认执行语句
}

示例:

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

输出:

Two

二、无表达式的 switch(类似 if-else 链)

switch 后面没有表达式时,相当于 switch true,可以用来构建复杂的条件判断。
示例:

package main
import "fmt"
func main() {score := 85switch {case score >= 90:fmt.Println("A")case score >= 80:fmt.Println("B")case score >= 70:fmt.Println("C")default:fmt.Println("D")}
}

输出:

B

三、多条件匹配

一个 case 可以匹配多个值,用逗号分隔。
示例:

package main
import "fmt"
func main() {day := "Tuesday"switch day {case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":fmt.Println("Weekday")case "Saturday", "Sunday":fmt.Println("Weekend")default:fmt.Println("Invalid day")}
}

输出:

Weekday

四、fallthrough 关键字

Go 的 switch 默认不会自动“穿透”到下一个 case,但可以使用 fallthrough 强制执行下一个 case 的代码。
示例:

package main
import "fmt"
func main() {num := 1switch num {case 1:fmt.Println("One")fallthroughcase 2:fmt.Println("Two")default:fmt.Println("Other")}
}

输出:

One
Two

⚠️ 注意:fallthrough 只能用在 case 的最后一句,且会无条件执行下一个 case,不会判断条件。

五、类型断言 switch(type switch)

Go 支持对接口变量进行类型判断,使用 switch v := x.(type) 语法。
示例:

package main
import "fmt"
func printType(x interface{}) {switch v := x.(type) {case int:fmt.Printf("Int: %d\n", v)case string:fmt.Printf("String: %s\n", v)case bool:fmt.Printf("Bool: %t\n", v)default:fmt.Println("Unknown type")}
}
func main() {printType(42)printType("hello")printType(true)printType(3.14)
}

输出:

Int: 42
String: hello
Bool: true
Unknown type

六、总结

Go 的 switch 语句具有以下特点:

  • 支持表达式匹配和无表达式匹配(类似 if-else)
  • 一个 case 可以匹配多个值
  • 默认不穿透,除非使用 fallthrough
  • 支持类型断言(switch v := x.(type)
  • 比 C/C++ 更安全、灵活
    switch 是 Go 中常用的控制结构,特别适合处理多分支逻辑,比冗长的 if-else 更清晰。
http://www.dtcms.com/a/310022.html

相关文章:

  • [论文阅读] 人工智能 + 软件工程 | Trae Agent:让AI智能体高效解决仓库级软件问题,登顶SWE-bench排行榜
  • gd32modbus从机移植
  • Nature图形复现—Graphpad绘制带P值的含数据点的小提琴图
  • etcd 的安装与使用
  • Go语言中的盲点:竞态检测和互斥锁的错觉
  • Python day31
  • qt中的手势
  • Element-plus的 ElMessage 另一种展示形式
  • 1.6万 Star 的流行容器云平台停止开源
  • 【n8n】如何跟着AI学习n8n【04】:错误处理与日志监控
  • 学习游戏制作记录(各种水晶能力以及多晶体)8.1
  • 流式编程终端操作
  • UnionApplication
  • 【C++/STL】vector基本介绍
  • 关于cherryusb的in/out完成条件
  • WAIC现场速递:AI热浪扑面而来|小奇说
  • QD9361开发板教程:基于zynq的PS端的DDR3测试
  • Vue+Cesium 基础搭建
  • 智能体的未来:AGI路径上的关键技术突破
  • 分类预测 | Matlab实现CPO-PNN冠豪猪算法优化概率神经网络多特征分类预测
  • Win11怎样安装DirectX 9
  • 稳健标准误
  • 【苍穹外卖项目】Day05
  • draw_ctx中clip_area和buf_area的区别,为什么看起来差不多?
  • 第四篇:材质与纹理:让物体“真实“起来
  • Linux选择
  • evo_traj的参数设置及保存图片
  • van list 重复进入onload
  • c++和python联合编程示例
  • Conda install安装了一些库,如何撤销操作