switch语句是一个多路分支语句。它提供了一种有效的方法,可以根据表达式的值(也称为case)将执行转移到代码的不同部分。Go语言支持两种类型的switch语句:
表达式switch
类型switch
表达式switch类似于C,C ++,Java语言中的switch语句。它提供了一种简单的方法,可以根据表达式的值将执行分派到代码的不同部分。
语法:
switch optstatement; optexpression{ case expression1: Statement.. case expression2: Statement.. ... default: Statement.. }
重要事项:
表达式switch中的optstatement和optexpression都是可选语句。
如果同时存在optstatement和optpression,则在它们之间需要使用分号(;)。
如果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中,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>