[关闭]
@adamhand 2019-01-30T12:33:33.000000Z 字数 1880 阅读 688

golang--switch


基本语法

switch 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个 if else 子句的常用方式。

下面是一个例子:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. finger := 4
  7. switch finger {
  8. case 1:
  9. fmt.Println("Thumb")
  10. case 2:
  11. fmt.Println("Index")
  12. case 3:
  13. fmt.Println("Middle")
  14. case 4:
  15. fmt.Println("Ring")
  16. case 5:
  17. fmt.Println("Pinky")
  18. }
  19. }

打印结果为:

  1. Ring

需要注意的是,在选项列表中,case 不允许出现重复项。比如下面的语法是错误的:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. finger := 4
  7. switch finger {
  8. case 1:
  9. fmt.Println("Thumb")
  10. case 2:
  11. fmt.Println("Index")
  12. case 3:
  13. fmt.Println("Middle")
  14. case 4:
  15. fmt.Println("Ring")
  16. case 4://重复项
  17. fmt.Println("Another Ring")
  18. case 5:
  19. fmt.Println("Pinky")
  20. }
  21. }

默认情况(Default Case)

当其他情况都不匹配时,将运行默认情况。例子如下:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. switch finger := 8; finger { //在这里,finger 变量的作用域仅限于这个 switch 内。
  7. case 1:
  8. fmt.Println("Thumb")
  9. case 2:
  10. fmt.Println("Index")
  11. case 3:
  12. fmt.Println("Middle")
  13. case 4:
  14. fmt.Println("Ring")
  15. case 5:
  16. fmt.Println("Pinky")
  17. default: // 默认情况
  18. fmt.Println("incorrect finger number")
  19. }
  20. }

default 不一定只能出现在 switch 语句的最后,它可以放在 switch 语句的任何地方。

多表达式判断

通过用逗号分隔,可以在一个 case 中包含多个表达式。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. letter := "i"
  7. switch letter {
  8. case "a", "e", "i", "o", "u": // 一个选项多个表达式
  9. fmt.Println("vowel")
  10. default:
  11. fmt.Println("not a vowel")
  12. }
  13. }

无表达式的 switch

在 switch 语句中,表达式是可选的,可以被省略。如果省略表达式,则表示这个 switch 语句等同于 switch true,并且每个 case 表达式都被认定为有效,相应的代码块也会被执行。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. num := 75
  7. switch { // 表达式被省略了
  8. case num >= 0 && num <= 50:
  9. fmt.Println("num is greater than 0 and less than 50")
  10. case num >= 51 && num <= 100:
  11. fmt.Println("num is greater than 51 and less than 100")
  12. case num >= 101:
  13. fmt.Println("num is greater than 100")
  14. }
  15. }

Fallthrough 语句

在 Go 中,每执行完一个 case 后,会从 switch 语句中跳出来,不再做后续 case 的判断和执行。使用 fallthrough 语句可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func number() int {
  6. num := 15 * 5
  7. return num
  8. }
  9. func main() {
  10. switch num := number(); { // num is not a constant
  11. case num < 50:
  12. fmt.Printf("%d is lesser than 50\n", num)
  13. fallthrough
  14. case num < 100:
  15. fmt.Printf("%d is lesser than 100\n", num)
  16. fallthrough
  17. case num < 200:
  18. fmt.Printf("%d is lesser than 200", num)
  19. }
  20. }

打印结果为:

  1. 75 is lesser than 100
  2. 75 is lesser than 200
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注