在 Go 语言中,switch
语句是一种控制结构,用于根据不同的条件执行不同的代码块。它提供了一种比连续的 if-else
语句更清晰、更简洁的方式来处理多个可能的选择。Go 语言中的 switch
语句有一些独特的特性,使其与 C 或 Java 中的 switch
有所不同。
基本语法
switch variableOrExpression {
case value1:
// 当 variableOrExpression 等于 value1 时执行的代码
case value2:
// 当 variableOrExpression 等于 value2 时执行的代码
default:
// 当 variableOrExpression 不等于任何 case 中的值时执行的代码
}
特性
自动 break:在 Go 语言中,每个
case
之后默认都有一个隐式的break
,这意味着一旦匹配成功并执行完相应的代码块后,程序会自动跳出switch
语句,而不会继续执行下一个case
。因此,不需要像在 C 或 Java 中那样显式地写break
。fallthrough:如果需要从一个
case
跳转到下一个case
,可以使用fallthrough
关键字。但是,fallthrough
只能跳转到直接下一个case
,并且即使下一个case
的条件不满足也会被执行。switch i := someValue; i { case 0: fmt.Println("Zero") fallthrough case 1: fmt.Println("One or Zero") }
表达式作为条件:Go 语言允许
case
后面跟的是一个表达式,而不仅仅是一个常量或变量。这些表达式会被依次求值,并与switch
表达式的值进行比较。switch n := someValue; true { case n > 0: fmt.Println("Positive") case n == 0: fmt.Println("Zero") case n < 0: fmt.Println("Negative") }
初始化语句:可以在
switch
语句开始之前定义一个初始化语句(如上例中的i := someValue
),这个初始化语句只会在switch
语句开始执行时运行一次。无条件 switch:可以省略
switch
后面的表达式,直接使用switch
关键字,这样每个case
都会作为一个布尔表达式来求值。switch { case someCondition1: // 如果 someCondition1 为真,则执行此代码 case someCondition2: // 如果 someCondition1 为假且 someCondition2 为真,则执行此代码 default: // 如果所有条件都为假,则执行此代码 }
使用场景
switch
语句通常用于当有多个互斥的条件需要检查时。例如,在处理用户输入、状态转换、枚举类型等场景中非常有用。通过使用 switch
,可以使代码更加整洁易读,避免了复杂的嵌套 if-else
结构。