switch語(yǔ)句是一個(gè)多路分支語(yǔ)句。它提供了一種有效的方法,可以根據(jù)表達(dá)式的值(也稱為case)將執(zhí)行轉(zhuǎn)移到代碼的不同部分。Go語(yǔ)言支持兩種類(lèi)型的switch語(yǔ)句:
表達(dá)式switch
類(lèi)型switch
表達(dá)式switch類(lèi)似于C,C ++,Java語(yǔ)言中的switch語(yǔ)句。它提供了一種簡(jiǎn)單的方法,可以根據(jù)表達(dá)式的值將執(zhí)行分派到代碼的不同部分。
語(yǔ)法:
switch optstatement; optexpression{ case expression1: Statement.. case expression2: Statement.. ... default: Statement.. }
重要事項(xiàng):
表達(dá)式switch中的optstatement和optexpression都是可選語(yǔ)句。
如果同時(shí)存在optstatement和optpression,則在它們之間需要使用分號(hào)(;)。
如果switch不包含任何表達(dá)式,則編譯器會(huì)假定該表達(dá)式為true。
可選語(yǔ)句,即optstatement包含簡(jiǎn)單的語(yǔ)句,例如變量聲明,遞增或賦值語(yǔ)句或函數(shù)調(diào)用等。
如果可選語(yǔ)句中存在變量,則該變量的范圍限于該switch語(yǔ)句。
在switch語(yǔ)句中,case和default語(yǔ)句不包含任何break語(yǔ)句。但是如果您的程序需要,您可以使用break和fallthrough語(yǔ)句。
默認(rèn)(default)語(yǔ)句在switch語(yǔ)句中是可選的。
如果一個(gè)case可以包含多個(gè)值,并且這些值之間用逗號(hào)(,)分隔。
如果一個(gè)case不包含任何表達(dá)式,則編譯器假定這個(gè)表達(dá)式為true。
獲取指定數(shù)字是星期幾的示例:
package main import "fmt" func main() { // Switch 語(yǔ)句同時(shí)使用兩種語(yǔ)句, 如可選語(yǔ)句, day:=4 和表達(dá)式 如: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語(yǔ)句不帶可選語(yǔ)句和表達(dá)式的示例:
package main import "fmt" func main() { var value int = 2 // switch語(yǔ)句不帶可選語(yǔ)句和表達(dá)式 switch { case value == 1: fmt.Println("Hello") case value == 2: fmt.Println("Bonjour") case value == 3: fmt.Println("Namstay") default: fmt.Println("Invalid") } }
輸出:
Bonjour
下面是沒(méi)有默認(rèn)語(yǔ)句的switch語(yǔ)句,case語(yǔ)句中的多個(gè)值:
package main import "fmt" func main() { var value string = "five" //沒(méi)有默認(rèn)語(yǔ)句的switch語(yǔ)句,case語(yǔ)句中的多個(gè)值 switch value { case "one": fmt.Println("C#") case "two", "three": fmt.Println("Go") case "four", "five", "six": fmt.Println("Java") } }
輸出:
Java
當(dāng)您想比較類(lèi)型時(shí),使用類(lèi)型switch。在此switch中,case包含要與switch表達(dá)式中出現(xiàn)的類(lèi)型進(jìn)行比較的類(lèi)型。
語(yǔ)法:
switch optstatement; typeswitchexpression{ case typelist 1: Statement.. case typelist 2: Statement.. ... default: Statement.. }
重要事項(xiàng):
可選語(yǔ)句,即optstatement,它與switch表達(dá)式中的類(lèi)似。
如果一個(gè)case可以包含多個(gè)值,并且這些值之間用逗號(hào)(,)分隔。
在類(lèi)型switch語(yǔ)句中,case和default語(yǔ)句不包含任何break語(yǔ)句。但是,如果程序需要,則可以使用break和fallthrough語(yǔ)句。
在類(lèi)型switch語(yǔ)句中,默認(rèn)語(yǔ)句是可選的。
typeswitchexpression是一個(gè)表達(dá)式,其結(jié)果是一個(gè)類(lèi)型。
如果使用:=運(yùn)算符在typeswitchexpression中分配了表達(dá)式,則該變量的類(lèi)型取決于case子句中的類(lèi)型。 如果case子句包含兩種或更多種類(lèi)型,則變量的類(lèi)型就是在typeswitchexpression中創(chuàng)建變量的類(lèi)型。
package main import "fmt" func main() { var value interface{} switch q := value.(type) { case bool: fmt.Println("值是布爾型") case float64: fmt.Println("值是float64類(lèi)型") case int: fmt.Println("值是int類(lèi)型") default: fmt.Printf("值的類(lèi)型是: %T", q) } }
輸出:
值的類(lèi)型是: <nil>