Golang 菜鸟教程

Golang 控制语句

Golang 函数 & 方法

Golang 结构体

Golang 切片 & 数组

Golang 字符串(String)

Golang 指针

Golang 接口

Golang 并发

Golang 异常(Error)

Golang 其他杂项

Go 语言Switch语句

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

  1. 表达式switch

  2. 类型switch

表达式switch

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

语法:

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

重要事项:

  • 表达式switch中的optstatement和optexpression都是可选语句。

  • 如果同时存在optstatementoptpression,则在它们之间需要使用分号(;)。

  • 如果switch不包含任何表达式,则编译器会假定该表达式为true。

  • 可选语句,即optstatement包含简单的语句,例如变量声明,递增或赋值语句或函数调用等。

  • 如果可选语句中存在变量,则该变量的范围限于该switch语句。

  • 在switch语句中,case和default语句不包含任何break语句。但是如果您的程序需要,您可以使用break和fallthrough语句。

  • 默认(default)语句在switch语句中是可选的。

  • 如果一个case可以包含多个值,并且这些值之间用逗号(,)分隔。

  • 如果一个case不包含任何表达式,则编译器假定这个表达式为true。

获取指定数字是星期几的示例:

package main

import "fmt"

func main() {

    // Switch 语句同时使用两种语句, 如可选语句, day:=4 和表达式 如: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

switch语句不带可选语句和表达式的示例:

package main 
  
import "fmt"
  
func main() { 
    var value int = 2 
      
      // switch语句不带可选语句和表达式
   switch { 
       case value == 1: 
       fmt.Println("Hello") 
       case value == 2: 
       fmt.Println("Bonjour") 
       case value == 3: 
       fmt.Println("Namstay") 
       default:  
       fmt.Println("Invalid") 
   } 
  
}

输出:

Bonjour

下面是没有默认语句的switch语句,case语句中的多个值:

package main

import "fmt"

func main() {
    var value string = "five"

    //没有默认语句的switch语句,case语句中的多个值
    switch value {
    case "one":
        fmt.Println("C#")
    case "two", "three":
        fmt.Println("Go")
    case "four", "five", "six":
        fmt.Println("Java")
    }
}

输出:

Java

类型switch

当您想比较类型时,使用类型switch。在此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语句。

  • 在类型switch语句中,默认语句是可选的。

  • typeswitchexpression是一个表达式,其结果是一个类型。

  • 如果使用:=运算符在typeswitchexpression中分配了表达式,则该变量的类型取决于case子句中的类型。 如果case子句包含两种或更多种类型,则变量的类型就是在typeswitchexpression中创建变量的类型。

package main

import "fmt"

func main() {
    var value interface{}
    switch q := value.(type) {
    case bool:
        fmt.Println("值是布尔型")
    case float64:
        fmt.Println("值是float64类型")
    case int:
        fmt.Println("值是int类型")
    default:
        fmt.Printf("值的类型是: %T", q)

    }
}

输出:

值的类型是: <nil>