📜  Go 中的 Switch 语句

📅  最后修改于: 2021-10-24 14:06:38             🧑  作者: Mango

switch 语句是一个多路分支语句。它提供了一种基于表达式的值(也称为 case)将执行转移到代码的不同部分的有效方法。 Go 语言支持两种类型的 switch 语句:

  1. 表情开关
  2. 类型开关

表情开关

表达式 switch 类似于 C、C++、 Java语言中的 switch 语句。它提供了一种简单的方法,可以根据表达式的值将执行分派到代码的不同部分。

句法:

switch optstatement; optexpression{
case expression1: Statement..
case expression2: Statement..
...
default: Statement..
}

要点:

  • 表达式开关中的optstatementoptexpression都是可选语句。
  • 如果optstatementoptexpression都存在,则它们之间需要一个分号 (;)。
  • 如果开关不包含任何表达式,则编译器假定该表达式为真。
  • 可选语句,即 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: