Golang教程:switch 语句
switch
是一个条件语句,用于将一个表达式的求值结果与可能的值的列表进行匹配,并根据匹配结果执行相应的代码。可以认为 switch 语句是编写多个 if-else 子句的替代方式。
举例是说明问题最好的方式,让我们写一个简单的程序,输入手指编号,输出对应的手指名称:)。例如 0 表示拇指,1 表示食指等。
package main import (
"fmt"
) func main() {
finger :=
switch finger {
case :
fmt.Println("Thumb")
case :
fmt.Println("Index")
case :
fmt.Println("Middle")
case :
fmt.Println("Ring")
case :
fmt.Println("Pinky") }
}
在上面的程序中,case
语句依次(从上到下)求值并与 finger
进行匹配,直到找到第一个与 finger
匹配的 case
,并执行其中的代码。在这里 finger
的值为 4,因此打印 Ring
。
多个有相同值的 case
是不允许的。如果你运行下面的程序,编译将会报错:duplicate case 4 in switch
。
package main import (
"fmt"
) func main() {
finger :=
switch finger {
case :
fmt.Println("Thumb")
case :
fmt.Println("Index")
case :
fmt.Println("Middle")
case :
fmt.Println("Ring")
case ://duplicate case
fmt.Println("Another Ring")
case :
fmt.Println("Pinky") }
}
default case
我们每只手只有 5 根手指,但是如果我们输入一个错误的手指序号会发生什么呢?这里就要用到 default
语句了。当没有其他 case
匹配时,将执行 default
语句。
package main import (
"fmt"
) func main() {
switch finger := ; finger {//finger is declared in switch
case :
fmt.Println("Thumb")
case :
fmt.Println("Index")
case :
fmt.Println("Middle")
case :
fmt.Println("Ring")
case :
fmt.Println("Pinky")
default: //default case
fmt.Println("incorrect finger number")
}
}
在上面的程序中,finger
的值为 8,它不匹配任何 case
,因此打印 incorrect finger number
。default
语句不必放在 switch
语句的最后,而可以放在 switch
语句的任何位置。
你也许发现了另外一个小的改变,就是将 finger
声明在了 switch
语句中。switch
语句可以包含一个可选的语句,该语句在表达式求值之前执行。在 switch finger := 8; finger
这一行中, finger
首先被声明,然后作为表达式被求值。这种方式(译者注:在 switch 语句中声明变量的方式)声明的 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
是否是元音。case "a", "e", "i", "o", "u":
这一行匹配所有的元音。程序的输出为:vowel
。
没有表达式的 switch
switch
中的表达式是可选的,可以省略。如果省略表达式,则相当于 switch true
,这种情况下会将每一个 case
的表达式的求值结果与 true
做比较,如果相等,则执行相应的代码。
package main import (
"fmt"
) func main() {
num :=
switch { // expression is omitted
case num >= && num <= :
fmt.Println("num is greater than 0 and less than 50")
case num >= && num <= :
fmt.Println("num is greater than 51 and less than 100")
case num >= :
fmt.Println("num is greater than 100")
} }
在上面的程序中,switch
后面没有表达式因此被认为是 switch true
并对每一个 case
表达式的求值结果与 true
做比较。case num >= 51 && num <= 100:
的求值结果为 true
,因此程序输出:num is greater than 51 and less than 100
。这种类型的 switch
语句可以替代多重 if else
子句。
fallthrough
在 Go 中执行完一个 case
之后会立即退出 switch
语句。fallthrough
语句用于标明执行完当前 case
语句之后按顺序执行下一个case
语句。
让我们写一个程序来了解 fallthrough
。下面的程序检测 number
是否小于 50,100 或 200。例如,如果我们输入75,程序将打印 75 小于 100 和 200,这是通过 fallthrough
语句实现的。
package main import (
"fmt"
) func number() int {
num := *
return num
} func main() { switch num := number(); { //num is not a constant
case num < :
fmt.Printf("%d is lesser than 50\n", num)
fallthrough
case num < :
fmt.Printf("%d is lesser than 100\n", num)
fallthrough
case num < :
fmt.Printf("%d is lesser than 200", num)
} }
switch
与 case
中的表达式不必是常量,他们也可以在运行时被求值。在上面的程序中 num
初始化为函数 number()
的返回值。程序首先对 switc
h 中的表达式求值,然后依次对每一个case
中的表达式求值并与 true
做匹配。匹配到 case num < 100:
时结果是 true
,因此程序打印:75 is lesser than 100
,接着程序遇到 fallthrough
语句,因此继续对下一个 case
中的表达式求值并与 true 做匹配,结果仍然是 true
,因此打印:75 is lesser than 200
。最后的输出如下:
is lesser than
is lesser than
fallthrough
必须是 case
语句块中的最后一条语句。如果它出现在语句块的中间,编译器将会报错:fallthrough statement out of place
。
还有一种 switch
语句叫做 type switch
,我们将在学习接口时介绍它。
本文摘自:https://blog.csdn.net/u011304970/article/details/74936112
Golang教程:switch 语句的更多相关文章
- Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...
- Golang switch语句总结
switch 语句基本结构 switch 条件表达式 { case 常量表达式1: 语句 1 case 常量表达式2: 语句 2 . . . case 常量表达式n: 语句 n default: 语句 ...
- Golang的选择结构-switch语句
Golang的选择结构-switch语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选择语句应用场景概述 选择结构也称为条件判断,生活中关于判断的场景也非常的多,比如: ( ...
- 11.PHP 教程_PHP Switch 语句
switch 语句用于根据多个不同条件执行不同动作. PHP Switch 语句 如果您希望有选择地执行若干代码块之一,请使用 switch 语句. 语法 switch (n) { case labe ...
- 松软科技web教程:JavaScript Switch 语句
switch 语句用于基于不同条件执行不同动作. JavaScript Switch 语句 请使用 switch 语句来选择多个需被执行的代码块之一. 语法 switch(表达式) { case n: ...
- 2、Golang基础--包的使用、if-else语句、循环、switch语句、数组、切片、可变函数参数、map类型
1 包的使用 // 为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理 // 定义包 -新建一个文件夹 -内部有很多go文件 -在每个go文件的第一行,都要声明包名,并且包名必须一致 -在一 ...
- PROCESS_YIELD()宏和C语言的switch语句< contiki学习笔记之七>
写在前面: 按照main()函数的代码一行一行的分析,该是看到了 etimer_process 这个位置.但是etimer_process实现里的一个宏 PROCESS_YIELD()引出了很多故事 ...
- 【代码笔记】Web-JavaScript-JavaScript switch语句
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 1.4 Go语言-switch语句(转)
与串联的if语句类似,switch语句提供了一个多分支条件执行的方法.不过在这里用一个专有名词来代表分支——case.每一个case可以携带一个表达式或一个类型说明符.前者又可被简称为case表达式. ...
随机推荐
- JS设置localStorage有效期
localStorage是一个没有时间限制的数据存储,如果没有手动删除它,它将永久保存. 但是有些时候我们又需要它在一段时间后自动删除,这里我们可以对它进行扩展. var date = new Dat ...
- ES6—— 变量的结构赋值
变量的结构赋值.基本概念: 本质上就是一中匹配模式,只要等号两边的模式相同,那么左边的变量就可以被赋予对应的值: 1.数组的结构赋值. 2.对象的结构赋值. 3.基本类型的结构赋值. let [a,b ...
- linux命令之磁盘与文件系统管理命令(上)
1.fdisk:磁盘分区工具 该命令是linux下常用的磁盘分区工具,但是只能给小于2TB的磁盘划分分区. 常用参数为-l,显示所有磁盘分区的信息. 示例: 1)显示磁盘分区列表 [root@boxi ...
- jquery事件一 ---鼠标移入移出
比较一下几个jquery事件的区别 mouseover() 鼠标进入(进入子元素也触发) mouseout() 鼠标离开(离开子元素也触发) mouseenter() 鼠标进入(进入子元素不触发) m ...
- 数论 CF230B T-primes
CF230B T-primes 我们知道质数是只有两个不同的正数因数的正整数.相似的,我们把一个正整数 t 叫做 T质数,如果 t 恰好有三个不同的正整数因数. 你被给了一个含有 n 个正整数的数组. ...
- python 入门级教你如何拿到小姐姐微信
第一题: 首先错误的思路,首先找出 707829217/2+1 里面的所有奇数,然后再利用两个for,来判断 import math def func_get_prime(n): return ...
- python为何需要虚拟环境--Python虚拟环境的安装和配置-virtualenv
一 虚拟环境 virtual environment 它是一个虚拟化,从电脑独立开辟出来的环境.通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的东西称作“容 ...
- string.Format("rspauth={0}",
public string rspauth(string Username, string Realm, string Password, string Nonce, string Cnonce, ...
- Intellij IDEA 封装Jar包(提示错误: 找不到或无法加载主类)
封装的过程如下: 然后准备打包 选择Build或者ReBuild即可. 但这样就会引起开始第一个图的问题.提示无法加载主类,另外一个情况就是所有的外部第三方jar包都被封装到一个jar包里面了. 那么 ...
- 51nod1238. 最小公倍数之和 V3(数论)
题目链接 https://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题解 本来想做个杜教筛板子题结果用另一种方法过了...... 所谓 ...