Go中的switch语句用法指南

2021年3月9日16:14:37 发表评论 605 次浏览

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

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

表达开关

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

语法如下:

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

重要事项:

  • 都陈述和压迫表达式开关中的是可选语句。
  • 如果两者陈述和压迫存在, 则它们之间需要使用分号(;)。
  • 如果该开关不包含任何表达式, 则编译器会假定该表达式为true。
  • 可选语句, 即optstatement包含简单的语句, 例如变量声明, 递增或赋值语句或函数调用等。
  • 如果可选语句中存在变量, 则该变量的范围限于该switch语句。
  • 在switch语句中, case和default语句不包含任何break语句。但是, 如果程序需要, 则可以使用break和fallthrough语句。
  • 默认语句在switch语句中是可选的。
  • 如果一个案例可以包含多个值, 并且这些值之间用逗号(, )分隔。
  • 如果一个案例不包含任何表达式, 则编译器假定te表达式为true。

范例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 optstatement; typeswitchexpression{
case typelist 1: Statement..
case typelist 2: Statement..
...
default: Statement..
}

重要事项:

  • 可选语句, 即optstatement与switch表达式中的语句类似。
  • 如果一个案例可以包含多个值, 并且这些值之间用逗号(, )分隔。
  • 在类型switch语句中, case和default语句不包含任何break语句。但是, 如果程序需要, 则可以使用break和fallthrough语句。
  • 在类型切换语句中, 默认语句是可选的。
  • 的类型开关表达式是其结果是类型的表达式。
  • 如果在中分配了表达式类型开关表达式使用:=运算符, 则该变量的类型取决于case子句中的类型。如果case子句包含两种或更多种类型, 则变量的类型就是在其中创建变量的类型类型开关表达式.

例子:

// 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: <nil>

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: