Go语言 switch语句

文章目录

    • 导言
    • switch
      • 介绍
      • 默认`case`
      • 多重表达式`case`
      • 无表达式`switch`
      • `fallthrough`
    • 原作者留言
    • 最后


导言

  • 原文链接: Part 10: Switch Statement
  • If translation is not allowed, please leave me in the comment area and I will delete it as soon as possible.

switch

介绍

switch 属于条件判断语句,它会将表达式与一系列的 case 进行比较。当表达式与某个 case 匹配时,switch 就会执行该 case 的代码块。

switch 可以看做是多个if else语句 的集合。

接下来,我们来写个程序,这个程序的功能是:根据手指编号,输出手指名,例如 1 是大拇指、2 是食指。

package main

import (  
    "fmt"
)

func main() {
       
    finger := 4
    switch finger {
     
    case 1:
        fmt.Println("Thumb")
    case 2:
        fmt.Println("Index")
    case 3:
        fmt.Println("Middle")
    case 4:
        fmt.Println("Ring")
    case 5:
        fmt.Println("Pinky")
    }
}

在上面的程序中,switch finger 表示:将 finger 与每个 case 进行比较。

switch 会根据 finger 的值,从上到下判断 case。遇到首个满足条件的 case 时,switch 会执行该 case 的代码块。

运行程序,输出如下:

Ring

不同的 case 不允许判断相同的常量。例如下面的这种情况:

package main

import (  
    "fmt"
)

func main() {
       
    finger := 4
    switch finger {
     
    case 1:
        fmt.Println("Thumb")
    case 2:
        fmt.Println("Index")
    case 3:
        fmt.Println("Middle")
    case 4:
        fmt.Println("Ring")
    case 4:	//重复的case
        fmt.Println("Another Ring")
    case 5:
        fmt.Println("Pinky")
    }
}

运行程序,编译器会抛出错误:

main.go:18:2: duplicate case 4 in switch previous case at tmp/sandbox887814166/main.go:16:7

默认case

一般来说,人的手指只有 5 根。如果手指编号是错误的,我们应该怎么处理呢?我们可以使用 默认case

当没有任何 case 匹配时,switch 会执行 默认case 的代码块。

package main

import (  
    "fmt"
)

func main() {
       
    switch finger := 8; finger {
     
    case 1:
        fmt.Println("Thumb")
    case 2:
        fmt.Println("Index")
    case 3:
        fmt.Println("Middle")
    case 4:
        fmt.Println("Ring")
    case 5:
        fmt.Println("Pinky")
    default: //default case
        fmt.Println("incorrect finger number")
    }
}

在上面的程序中,手指编号finger 等于 8,该编号无法匹配任何 case,于是 switch 会执行 默认case 的代码。

程序输出如下:

incorrect finger number

默认case 不一定需要写在 case们 的最后,它可以放在 switch内部 的任何地方。

仔细观察上面的程序,你会发现:声明 finger变量 的方式 发生了变化,我们将它声明在了 switch 中。

定义 switch 时,我们可以添加一条可选的语句,这条语句会在 switch 判断前执行。

switch finger := 8; finger 表示:在 switch语句 内声明并使用 finger此时 finger 的作用域将被限制在 switch代码块 中。


多重表达式case

在同个 case 中,我们能放置多个表达式,这些表达式使用逗号进行分隔。

package main

import (  
    "fmt"
)

func main() {
       
    letter := "i"
    switch letter {
     
    case "a", "e", "i", "o", "u": //multiple expressions in case
        fmt.Println("vowel")
    default:
        fmt.Println("not a vowel")
    }
}

上面的程序能判断 letter 是否为元音。

运行程序,输出如下:

vowel

无表达式switch

Go语言 中,我们可以省略 switch语句 的表达式。如果表达式被省略,switch 可以认为是 switch true,此时 case 也需要作出些许改变。

package main

import (  
    "fmt"
)

func main() {
       
    num := 75
    switch {
      // expression is omitted
    case num >= 0 && num <= 50:
        fmt.Println("num is greater than 0 and less than 50")
    case num >= 51 && num <= 100:
        fmt.Println("num is greater than 51 and less than 100")
    case num >= 101:
        fmt.Println("num is greater than 100")
    }
}

在上面的程序中,我们省略了 switch 的表达式。可以注意到,此时 case 也做出了些许改变。

运行程序,输出如下:

num is greater than 51 and less than 100

fallthrough

Go 中,当首个 case 被执行后,程序会马上跳出 switch。通过 fallthrough,我们能让 switch 继续执行下一个 case代码块。

通过程序来理解 fallthrough。这个程序会检查输入是否小于 50100200。举个例子,如果我们输入 75,此时程序会输出 75 小于 10075 小于 200

程序如下:

package main

import (  
    "fmt"
)

func number() int {
       
        num := 15 * 5 
        return num
}

func main() {
     

    switch num := number(); {
      //num is not a constant
    case num < 50:
        fmt.Printf("%d is lesser than 50\n", num)
        fallthrough
    case num < 100:
        fmt.Printf("%d is lesser than 100\n", num)
        fallthrough
    case num < 200:
        fmt.Printf("%d is lesser than 200", num)
    }
}

Go语言 中,我们能将变量作为 switchcase 的表达式,程序运行时能评估这些表达式。

在上面的程序中,我们用 number函数的返回值 初始化 num变量。之后,程序会进入 switch 内部,评估每个 case

如果 case num < 100: 等于 true,程序将会输出 75 is lesser than 100。由于该 case代码块 最后是 fallthrough,于是程序会执行下一个 case代码块,此时会再输出:75 is lesser than 200

最终,程序输出如下:

75 is lesser than 100  
75 is lesser than 200  

case代码块 存在 fallthrough 时,fallthrough 必须位于该代码块的最后,否则,编译器会抛出错误:fallthrough statement out of place

上面就是普通的 switch 了,其实 Go语言 还有一种 switchtype switch。我们将在 Go语言 接口 讨论 type switch

这就是 switch 了~

祝你头发茂密~


原作者留言

优质内容来之不易,您可以通过该 链接 为我捐赠。


最后

感谢原作者的优质内容。

欢迎指出文中的任何错误。

你可能感兴趣的:(go语言,翻译,编程语言,go,switch,case)