Go语言中的条件判断语句主要包括两种:第一种是if语句,第二种是switch语句。其中,应用最广泛的是if语句。下面分别介绍这两种语句的使用方法。
if语句是最基本、最常用的条件判断语句,通过判断条件表达式的值确定是否执行一段语句,或者选择执行哪部分语句。if语句分为简单if语句、if…else语句、if…else if…else语句和if嵌套语句几种形式。
简单if语句的语法格式如下。
参数说明如下。
表达式:用于指定条件表达式,可以使用逻辑运算符。
语句:当表达式的值为true时执行的语句。
简单if语句的执行流程如图4.1所示。
图4.1 简单if语句的执行流程
在简单if语句中,首先判断表达式的值,如果值是true,则执行相应的语句,否则不执行。
例如,根据比较两个变量的值,判断是否输出比较结果。代码如下。
运行结果如下。
m大于n
【例4.1】 获取3个数中的最大值 (实例位置:资源包 \TM\sl\4\1 )
将3个数字56、76、96分别定义在变量中,应用简单if语句获取这3个数中的最大值。代码如下。
运行结果如下。
56、76、96等3个数的最大值为96
在简单if语句的基础上增加一个可选的else语句,当表达式的值是false时,执行else语句中的内容。if…else语句的语法格式如下。
参数说明如下。
表达式:用于指定条件表达式,可以使用逻辑运算符。
语句1:当表达式的值为true时执行的语句。
语句2:当表达式的值为false时执行的语句。
if...else语句的执行流程如图4.2所示。
图4.2 if...else语句的执行流程
在if…else语句中,首先判断表达式的值,如果是true,则执行语句1中的内容,否则执行语句2中的内容。
例如,根据比较两个变量的值,输出比较的结果。代码如下。
运行结果为:
m小于或等于n
【例4.2】 判断2023年2月的天数 (实例位置:资源包 \TM\sl\4\2 )
如果某一年是闰年,那么这一年的2月就有29天,否则这一年的2月只有28天。应用if…else语句判断2023年2月的天数。代码如下。
运行结果如下。
2023年2月的天数为28天
if语句是一种很灵活的语句,除了if...else的形式,还有if ... else if…else的形式。这种形式可以进行更多的条件判断,不同条件对应不同的语句。if...else if…else语句的语法格式如下。
if...else if…else语句的执行流程如图4.3所示。
图4.3 if...else if…else语句的执行流程
【例4.3】 判断空气质量状况 (实例位置:资源包 \TM\sl\4\3 )
空气污染指数(air pollution index,API)是评估空气质量状况的一组数字,空气质量状况的判断标准如下。
空气污染指数为0~100属于良好。
空气污染指数为101~200属于轻度污染。
空气污染指数为201~300属于中度污染。
空气污染指数大于300属于重度污染。
假设某城市今天的空气污染指数为76,判断该城市的空气质量状况。代码如下。
运行结果如下。
空气质量状况:良好
if语句不但可以单独使用,还可以嵌套应用,即在if、else if或else语句中嵌套其他if语句。基本语法格式如下。
在使用if语句进行条件判断时,应尽量避免使用过多的if嵌套语句,过多的if嵌套语句不但会使代码冗余,而且不利于程序的维护。
【例4.4】 判断年龄段 (实例位置:资源包 \TM\sl\4\4 )
使用if嵌套语句判断25岁处在哪个年龄段。已知年龄在18岁以下为未成年,年满18岁为成年,其中,年龄在0~6岁属于儿童,年龄在7~17岁属于少年,年龄在18~40岁属于青年,年龄在41~65岁属于中年,年龄在66岁以上属于老年。代码如下。
运行结果如下。
25岁正处在青年时期
switch是典型的多条件分支语句,与if...else if…else语句基本相同,但switch语句比if...else if…else语句更具有可读性,它可以根据一个变量的值选择不同的分支执行。switch语句允许在找不到匹配条件时执行一组默认语句。switch语句有3种使用形式,语法格式分别如下。
语法格式说明如下。
switch后面可以根据需要决定是否设置变量。
switch语句中可以有多个case语句,但只能有一个default语句。
case后面的值或表达式用来设置变量的匹配项或判断条件。case语句从上到下按顺序执行,如果匹配成功或条件成立,则执行对应的语句,执行后直接跳出整个switch语句。
switch关键字后设置了变量的执行流程如图4.4所示。
图4.4 switch关键字后设置了变量的执行流程
switch关键字后未设置变量的执行流程如图4.5所示。
图4.5 switch关键字后面未设置变量的执行流程
switch语句比较常见的应用是从多个case中找到和变量匹配的值,从而执行对应的语句。下面通过示例来了解一下switch语句几种不同形式的用法。
【例4.5】 输出贴心提醒警句 (实例位置:资源包 \TM\sl\4\5 )
将“今天是星期几”定义在变量中,根据“今天是星期几”输出不同的贴心提醒警句。代码如下。
运行结果如下。
今天是周末, 可以好好放松一下了。
相对于其他一些语言来说,Go语言中的switch语句结构更加灵活,语法设计也是以方便为主。使用switch语句匹配变量的值,还可以将变量的赋值操作定义在switch关键字后面。在例4.5中,将变量的赋值放在switch关键字后面,将代码中的“switch weekday”修改为“switch weekday := "星期六";weekday”即可。
在设置变量的匹配项时,还可以在case后面设置多个值,多个值之间用逗号分隔。
【例4.6】 判断当前季节 (实例位置:资源包 \TM\sl\4\6 )
使用switch语句判断当前月份属于哪个季节,代码如下。
运行结果如下。
现在是 9 月 当前月份属于秋季
当switch关键字后未设置变量时,case后面必须是一个包含运算符的表达式,用于对已经声明的变量进行条件判断。
【例4.7】 输出考试成绩对应的等级 (实例位置:资源包 \TM\sl\4\7 )
将某学校的学生成绩转化为不同等级,划分标准如下。
“优秀”,大于或等于90分;
“良好”,大于或等于75分;
“及格”,大于或等于60分;
“不及格”,小于60分。
假设某学生的考试成绩是66分,输出该成绩对应的等级。代码如下。
运行结果如下。
考试成绩等级:及格
在默认情况下,当程序执行某个case语句之后,不会再向下执行其他case语句,而是直接跳出整个switch语句。要想继续执行下一个case语句,可以在case语句中加入fallthrough关键字。示例代码如下。
运行结果如下。
20 30
从运行结果可以看出,switch从第一个匹配的case语句开始执行,如果case语句中设置了fallthrough,则程序会继续执行下一条case,而且不会判断下一个case后面的值是否匹配。