在 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 结构。