switch 语句是一个多路分支语句。它提供了一种基于表达式的值(也称为 case)将执行转移到代码的不同部分的有效方法。 Go 语言支持两种类型的 switch 语句:
- 表情开关
- 类型开关
表情开关
表达式 switch 类似于 C、C++、 Java语言中的 switch 语句。它提供了一种简单的方法,可以根据表达式的值将执行分派到代码的不同部分。
句法:
switch optstatement; optexpression{
case expression1: Statement..
case expression2: Statement..
...
default: Statement..
}
要点:
- 表达式开关中的optstatement和optexpression都是可选语句。
- 如果optstatement和optexpression都存在,则它们之间需要一个分号 (;)。
- 如果开关不包含任何表达式,则编译器假定该表达式为真。
- 可选语句,即 optstatement 包含简单的语句,如变量声明、递增或赋值语句或函数调用等。
- 如果可选语句中存在变量,则变量的范围仅限于该 switch 语句。
- 在 switch 语句中,case 和 default 语句不包含任何 break 语句。但是如果您的程序需要,您可以使用 break 和 fallthrough 语句。
- switch 语句中的 default 语句是可选的。
- 如果一个 case 可以包含多个值,并且这些值用逗号 (,) 分隔。
- 如果 case 不包含任何表达式,则编译器假定 te 表达式为真。
示例 1:
// Go program to illustrate the
// concept of Expression switch
// statement
package main
import "fmt"
func main() {
// Switch statement with both
// optional statement, i.e, day:=4
// and expression, i.e, day
switch day:=4; day{
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
case 4:
fmt.Println("Thursday")
case 5:
fmt.Println("Friday")
case 6:
fmt.Println("Saturday")
case 7:
fmt.Println("Sunday")
default:
fmt.Println("Invalid")
}
}
输出:
Thursday
示例 2:
// Go program to illustrate the
// concept of Expression switch
// statement
package main
import "fmt"
func main() {
var value int = 2
// Switch statement without an
// optional statement and
// expression
switch {
case value == 1:
fmt.Println("Hello")
case value == 2:
fmt.Println("Bonjour")
case value == 3:
fmt.Println("Namstay")
default:
fmt.Println("Invalid")
}
}
输出:
Bonjour
示例 3:
// Go program to illustrate the
// concept of Expression switch
// statement
package main
import "fmt"
func main() {
var value string = "five"
// Switch statement without default statement
// Multiple values in case statement
switch value {
case "one":
fmt.Println("C#")
case "two", "three":
fmt.Println("Go")
case "four", "five", "six":
fmt.Println("Java")
}
}
输出:
Java
类型开关
当您要比较类型时使用类型开关。在这个 switch 中,case 包含将与 switch 表达式中存在的类型进行比较的类型。
句法:
switch optstatement; typeswitchexpression{
case typelist 1: Statement..
case typelist 2: Statement..
...
default: Statement..
}
要点:
- 可选语句,即 optstatement 与 switch 表达式中的类似。
- 如果一个 case 可以包含多个值,并且这些值用逗号 (,) 分隔。
- 在类型 switch 语句中,case 和 default 语句不包含任何 break 语句。但是如果您的程序需要,您可以使用 break 和 fallthrough 语句。
- default 语句在 type switch 语句中是可选的。
- typeswitchexpression是结果为类型的表达式。
- 如果使用 := 运算符在typeswitchexpression 中分配表达式,则该变量的类型取决于 case 子句中存在的类型。如果 case 子句包含两个或更多类型,则变量的类型是在typeswitchexpression 中创建它的类型。
例子:
// Go program to illustrate the
// concept of Type switch
// statement
package main
import "fmt"
func main() {
var value interface{}
switch q:= value.(type) {
case bool:
fmt.Println("value is of boolean type")
case float64:
fmt.Println("value is of float64 type")
case int:
fmt.Println("value is of int type")
default:
fmt.Printf("value is of type: %T", q)
}
}
输出:
value is of type: