Go 系列教程

您所在的位置:网站首页 go语言的什么语句可以无条件地转移到程序指定的行 Go 系列教程

Go 系列教程

2024-07-12 01:29| 来源: 网络整理| 查看: 265

vicever Go 系列教程 —— 10. switch 语句 vicever · · 21404 次点击 · · 开始浏览     这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。 第一次,站长亲自招 Gopher 了>>> 这是 [Golang 系列教程](/subject/2)中的第 10 篇。 switch 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个 `if else` 子句的常用方式。 看代码比文字更容易理解。让我们从一个简单的例子开始,它将把一个手指的编号作为输入,然后输出该手指对应的名字。比如 0 是拇指,1 是食指等等。 ```go 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") } } ``` [在线运行程序](https://play.golang.org/p/q4kjm2kpVe) 在上述程序中,`switch finger` 将 `finger` 的值与每个 `case` 语句进行比较。通过从上到下对每一个值进行对比,并执行与选项值匹配的第一个逻辑。在上述样例中, `finger` 值为 4,因此打印的结果是 `Ring` 。 在选项列表中,`case` 不允许出现重复项。如果您尝试运行下面的程序,编译器会报这样的错误: `main.go:18:2:在tmp / sandbox887814166 / main.go:16:7` ```go 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://重复项 fmt.Println("Another Ring") case 5: fmt.Println("Pinky") } } ``` [在线运行程序](https://play.golang.org/p/SfXdChWdoN) ## 默认情况(Default Case) 我们每个人一只手只有 5 个手指。如果我们输入了不正确的手指编号会发生什么?这个时候就应该是属于默认情况。当其他情况都不匹配时,将运行默认情况。 ```go 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: // 默认情况 fmt.Println("incorrect finger number") } } ``` [在线运行程序](https://play.golang.org/p/Fq7U7SkHe1) 在上述程序中 `finger` 的值是 8,它不符合其中任何情况,因此会打印 `incorrect finger number`。default 不一定只能出现在 switch 语句的最后,它可以放在 switch 语句的任何地方。 您可能也注意到我们稍微改变了 `finger` 变量的声明方式。`finger` 声明在了 switch 语句内。在表达式求值之前,switch 可以选择先执行一个语句。在这行 `switch finger:= 8; finger` 中, 先声明了`finger` 变量,随即在表达式中使用了它。在这里,`finger` 变量的作用域仅限于这个 switch 内。 ## 多表达式判断 通过用逗号分隔,可以在一个 case 中包含多个表达式。 ```go package main import ( "fmt" ) func main() { letter := "i" switch letter { case "a", "e", "i", "o", "u": // 一个选项多个表达式 fmt.Println("vowel") default: fmt.Println("not a vowel") } } ``` [在线运行程序](https://play.golang.org/p/Zs9Ek5SInh) 在 `case "a","e","i","o","u":` 这一行中,列举了所有的元音。只要匹配该项,则将输出 `vowel`。 ## 无表达式的 switch 在 switch 语句中,表达式是可选的,可以被省略。如果省略表达式,则表示这个 switch 语句等同于 `switch true`,并且每个 `case` 表达式都被认定为有效,相应的代码块也会被执行。 ```go package main import ( "fmt" ) func main() { num := 75 switch { // 表达式被省略了 case num >= 0 && num = 51 && num = 101: fmt.Println("num is greater than 100") } } ``` [在线运行程序](https://play.golang.org/p/mMJ8EryKbN) 在上述代码中,switch 中缺少表达式,因此默认它为 true,true 值会和每一个 case 的求值结果进行匹配。`case num >= 51 &&


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3