关于go:Go-Switch

52次阅读

共计 1520 个字符,预计需要花费 4 分钟才能阅读完成。

switch 语句

应用 switch 语句来抉择要执行的多个代码块中的一个。

在 Go 中的 switch 语句相似于 C、C++、Java、JavaScript 和 PHP 中的 switch 语句。不同之处在于它只执行匹配的 case,因而不须要应用 break 语句。

繁多 case 的 switch 语法

switch 表达式 {
case x:
   // 代码块
case y:
   // 代码块
case z:
   // ...
default:
   // 代码块
}

它的工作形式如下:

  1. 表达式被评估一次。
  2. switch 表达式的值与每个 case 的值进行比拟。
  3. 如果匹配,则执行相干的代码块。
  4. 默认关键字是可选的。它指定了如果没有匹配的 case 时要运行的一些代码。

繁多 case 的 switch 示例

上面的示例应用星期几的数字来计算星期几的名称:

package main

import ("fmt")

func main() {
   day := 4

   switch day {
   case 1:
      fmt.Println("星期一")
   case 2:
      fmt.Println("星期二")
   case 3:
      fmt.Println("星期三")
   case 4:
      fmt.Println("星期四")
   case 5:
      fmt.Println("星期五")
   case 6:
      fmt.Println("星期六")
   case 7:
      fmt.Println("星期日")
   }
}

后果:

星期四

default 关键字

default 关键字指定了在没有匹配的 case 时要运行的一些代码:

package main

import ("fmt")

func main() {
   day := 8

   switch day {
   case 1:
      fmt.Println("星期一")
   case 2:
      fmt.Println("星期二")
   case 3:
      fmt.Println("星期三")
   case 4:
      fmt.Println("星期四")
   case 5:
      fmt.Println("星期五")
   case 6:
      fmt.Println("星期六")
   case 7:
      fmt.Println("星期日")
   default:
      fmt.Println("不是工作日")
   }
}

后果:

不是工作日

所有 case 值应与 switch 表达式具备雷同的类型。否则,编译器将引发谬误。

package main

import ("fmt")

func main() {
   a := 3

   switch a {
   case 1:
      fmt.Println("a 是一")
   case "b":
      fmt.Println("a 是 b")
   }
}

后果:

./prog.go:11:2: 无奈将类型为 untyped string 的 "b" 用作 int 类型

多个值的 switch 语句

在 switch 语句中,每个 case 能够有多个值:

语法

switch 表达式 {
case x, y:
   // 代码块(如果表达式的值是 x 或 y)case v, w:
   // 代码块(如果表达式的值是 v 或 w)case z:
   // ...
default:
   // 代码块(如果表达式在任何 case 中都没有找到)}

多个值的 switch 示例

上面的示例应用星期几的数字返回不同的文本:

package main

import ("fmt")

func main() {
   day := 5

   switch day {
   case 1, 3, 5:
      fmt.Println("奇数工作日")
   case 2, 4:
      fmt.Println("偶数工作日")
   case 6, 7:
      fmt.Println("周末")
   default:
      fmt.Println("有效的日期编号")
   }
}

后果:

奇数工作日

最初

为了不便其余设施和平台的小伙伴观看往期文章,链接奉上:

公众号搜寻 Let us Coding 知乎 开源中国 CSDN 思否 掘金 InfoQ 简书 博客园 慕课 51CTOhelloworld 腾讯开发者社区 阿里开发者社区

看完如果感觉有帮忙,欢送 点赞、珍藏 关注

正文完
 0