
在Go语言中,switch,是一个高度灵活,其功能强大的控制结构,相比较Java中的switch,更受到语言重视。
它不仅可以替代多层 if-else,还能在更复杂的逻辑中灵活应用。下面详细讲解 switch 的深度用法,并结合示例展示如何充分发挥其功能。switch 的基础语法用来匹配单个变量的值:
package main
import "fmt"
func main(){
x:=2
switch x{
case 1:
fmt.println("x 等于 1");
case 2:
fmt.println("x 等于 2");
case 3:
fmt.println("x 等于 3");
}
}每个case分支可以匹配多个值,使用逗号分隔。
package main
import "fmt"
func main(){
day:="Tuesday"
switch day{
case "Mondey","Tuesday","Wednesday":
fmt.Println("这是工作日")
case "Saturday","Sunday":
fmt.Println("这是周末")
default:
fmt.Println("无效的天数")
}
}Go中的switch可以省略表达式,直接用作条件分支判断,这类似于多层if-else。
package main
import "fmt"
func main(){
x:=1
switch{
case x > 0:
fmt.Println("正数")
case x < 0:
fmt.Println("负数")
default:
fmt.Println("0")
}
}switch v {
case condition1:
case condition2:
}switch 后面带有一个表达式(如 v)。case 的条件必须是一个具体值或与表达式可比较的值。case 1, case 'a'等。switch {
case condition1:
case condition2!=11 && condition2 !=12:
}switch 后没有表达式。case 是一个布尔条件表达式(即可以为 true 或 false)。默认情况下,swich在匹配到一个case后会退出。如果想继续执行下一个case,可以使用 fallthrough 关键字。
package main
import "fmt"
func main() {
switch x := 1; x {
case 1:
fmt.Println("x 是 1")
fallthrough
case 2:
fmt.Println("这行会执行,因为 fallthrough")
default:
fmt.Println("默认分支")
}
}注意:fallthrough 不会重新检查条件,仅执行下一个分支。switch 可以配合类型断言使用,用来处理接口的不同类型
package main
import "fmt"
func main() {
var i interface{} = 42 // i 可以是任意类型
switch v := i.(type) {
case int:
fmt.Printf("i 是 int,值为 %d\n", v)
case string:
fmt.Printf("i 是 string,值为 %s\n", v)
case bool:
fmt.Printf("i 是 bool,值为 %t\n", v)
default:
fmt.Printf("未知类型: %T\n", v)
}
}在 switch 中嵌套另一个switch以实现更复杂的条件逻辑。
package main
import "fmt"
func main() {
x := 10
switch {
case x > 0:
fmt.Println("x 是正数")
switch {
case x%2 == 0:
fmt.Println("x 是偶数")
default:
fmt.Println("x 是奇数")
}
case x < 0:
fmt.Println("x 是负数")
default:
fmt.Println("x 是零")
}
}当条件分支过多时,用 switch 可以避免冗长的 if-else 语句,提高代码可读性。
package main
import "fmt"
func main() {
grade := 85
switch {
case grade >= 90:
fmt.Println("优秀")
case grade >= 75:
fmt.Println("良好")
case grade >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}通过灵活使用 switch,可以使代码更清晰、更易维护,是 Go 中不可或缺的控制结构之一。在结尾处,我就替大家回答一个疑惑。
Java 中 switch 不是不太支持使用吗?为什么在 Go 中却备受重视?
Go 的哲学:简单直接
switch 被设计得功能很强大,适用于多种场景(值判断、逻辑分支、类型断言),因此在 Go 中更受重视。Java 的哲学:面向对象优先
switch 的使用场景相对有限。希望大家收获,到此结束喽 ( ̄︶ ̄)↗ 高抬贵手,一键三联。略略