Go语言的switch语句更简洁安全,支持值匹配和无表达式形式,自动break且可用fallthrough控制穿透,可替代if-else链。

Go语言中的switch语句是一种灵活的控制结构,用于根据表达式的值或条件进行分支执行。与C或Java不同,Go的switch更简洁、安全且功能强大,支持多种写法和控制方式。
最常见的用法是根据一个表达式的值进行匹配:
switch day := time.Now().Weekday(); day {
case time.Monday:
fmt.Println("今天是周一")
case time.Tuesday:
fmt.Println("今天是周二")
case time.Wednesday:
fmt.Println("今天是周三")
default:
fmt.Println("其他日子")
}
说明:
time.Now().Weekday() 的结果会被依次与每个 case 比较。default 是可选的,用于处理未匹配的情况。fallthrough)。switch可以不带表达式,此时它等价于对true进行判断,适合替换复杂的if-else逻辑:
立即学习“go语言免费学习笔记(深入)”;
hour := time.Now().Hour()
switch {
case hour < 12:
fmt.Println("上午好")
case hour < 18:
fmt.Println("下午好")
default:
fmt.Println("晚上好")
}
这种写法让代码更清晰,每个case是一个布尔条件,从上往下匹配第一个为真的分支。
一个case可以匹配多个值,使用逗号分隔:
switch today := time.Now().Weekday(); today {
case time.Saturday, time.Sunday:
fmt.Println("周末到了!")
default:
fmt.Println("工作日继续努力")
}
如果希望某个case执行完后继续执行下一个case,可以显式使用fallthrough:
switch i := 2; i {
case 2:
fmt.Println("匹配到2")
fallthrough
case 3:
fmt.Println("即使不是3也会执行")
}
输出会是两行内容。注意:fallthrough会直接进入下一个case的语句块,不再判断其条件。
switch还可用于判断接口变量的具体类型,这在处理泛型数据时非常有用:
var x interface{} = "hello"
switch v := x.(type) {
case string:
fmt.Println("字符串:", v)
case int:
fmt.Println("整数:", v)
default:
fmt.Println("未知类型")
}
其中v := x.(type)是特有语法,只能在type switch中使用,v是转换后的具体值。
基本上就这些。Go的switch语句设计简洁,既能处理值比较,也能做条件判断和类型断言,是流程控制中非常实用的工具。合理使用可以让代码更易读、更安全。
以上就是Golang switch语句如何进行分支控制的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号