这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
一、本堂课重点内容
本堂课的知识要点有哪些?
- Go语言if语句
- Go语言switch语句
- Go语言select语句
二、详细知识点介绍
本堂课介绍了哪些知识点?
Go语言if语句
-
if语句称为条件语句, 通常用于选择“yes”和“no”的逻辑判断场合。if语句是Go语言基本的条件分支语句,使用的时候必须带有逻辑表达式。 其典型的语法格式如下:if 条件表达式{ 语句块1 } else { 语句块2 } -
如果只有两种情况,也就是说只有两个分支,而第二个分支没有需要执行的语句,此时可以忽略
else。 -
Go语言允许在
if关键字之后,条件表达式之前,插入一个简单语句,称为if语句的子句,与条件表达式之间用分号隔开。if子句是可选的,一旦有,必须为简单语句(区别于由多条语句构成的复合语句)。 -
if...else语句还允许嵌套,在其语句块1和语句块2内部还可以有if...else语句,形成语句块3和语句块4;语句块3和语句块4还可以嵌套if...else形成语句块5和语句块6。这样一层套一层,层数没有限制,只需要保持花括号配对即可。 -
对于多分支的情况,如果采用
if...else嵌套,则很容易导致逻辑复杂混乱,易出错,程序难懂,这时可以考虑用if...else if语句替代。该语句格式是专门用来处理if语句多分支的情况。
Go语言switch语句
-
switch语句称为开关语句,是Go语言专门为多分支选择执行而设计的语句。switch作为多分支开关,后接一个开关表达式,而用case表示多分支出口。每个case后面也要带同类型的表达式,case后边还可以带多个表达式。其语法格式如下:switch 可选子句; 可选表达式 { case 表达式列表1: 语句块1 case 表达式列表2: 语句块2 ... case 表达式列表n: 语句块n default: 语句块d } -
case表达式的计算顺序是从上到下,从左到右,计算结果会与switch表达式的计算结果相比较,结果相同的case分支将得到执行。如果所有case表达式的值都与switch表达式的值不同,则执行default分支;如果没有该分支,则直接结束switch语句。 -
switch的可选子句必须为Go语言的简单语句,与if子句相同。如果有可选子句出现,则必须用分号与后面的可选表达式隔开,即使后面的可选表达式没有,分号也不能省略。 -
如果变量是在可选子句里用短变量声明的,则其作用域为从声明处到
switch结尾,包括所有case分支和default分支。如果各个case包含了嵌套的子语句块,则在该子语句块也可见。 -
switch语句的可选表达式可以是算术表达式也可以是逻辑表达式,甚至可以没有。如果没有可选表达式,则编译系统会默认为逻辑表达式,其值为true,这种情况下要求所有case表达式为逻辑表达式。 -
case分支后面必须有表达式列表,其类型必须与switch表达式匹配,表达式数量不限,必须用逗号隔开。多个表达式对应同一个分支,执行相同动作。 -
default:为switch语句的缺省分支,不是必须的,如果有的话,位置不限,可放置在任何地方。若没有任何case匹配,流程控制将执行default分支,执行结束退出switch语句。如果没有任何case匹配,也没有default分支,则直接退出switch语句。 -
类型
switch本质上与表达式switch差不多,都是switch后面带表达式,根据表达式的计算结果来匹配每个case。不同的地方是,类型switch的表达式为类型断言表达式,用关键字type代替实际类型,其表达式的计算结果值是变量的类型字面量。 -
switch语句和if语句一样,允许嵌套使用。在每个case后面的语句块中如果又包含了多种可能条件需要判断执行,就可以继续使用switch...case进行多分支选择,从而形成了switch的嵌套。 -
与C语言不同,Go语言不需要显式地在每一个
case分支最后加一个break语句。因为系统默认在每一个case分支最后隐含一个break。如果要在case分支语句块中提前退出程序的执行,则必须人为地插入一个break语句,退出当前的switch语句。 -
break语句也可以一次退出多层switch,只需在break后面加一个标签即可。要退出哪一层switch,就跳转到该switch前面的标签处。标签是一个带有冒号结束的标识符,只可以放置在for,switch和select前面。 -
Go语言专门提供了一条语句:
fallthrough,用来穿越case,去执行下一个case分支的语句块。一条fallthrough语句仅穿越一个case,如果需要连续穿越多个case,则需要多条fallthrough语句,在每个需要被穿越的case前面放置一条fallthrough。 -
fallthrough语句仅适用于表达式switch,对类型switch及select语句无效,且非法。
Go语言select语句
select语句与switch语句类似,都是根据表达式的值来匹配多分支case,匹配成功则执行该case分支;匹配不成功则执行default分支。select语句的case表达式只有通道操作语句,select语句从上到下,从左到右扫描计算所有case,寻找所有非阻塞的case,然后随机选择一个非阻塞的case执行。select也支持break语句,在任意case分支上,如果提前结束程序流程,可以插入一条break语句。如果有多层嵌套的select语句,需要一次性退出多层select,可以加标签,将程序流程直接退出标签标注的select语句。