Go by Example-Switch分支结构
上一节提到了Go语言中的if/else结构,但是条件过多的时候就不适合用if语句了,这个时候我们就可以使用switch语句了。
基本特性
switch 是一个条件语句,用于将一个表达式的求值结果与可能的值的列表进行匹配,并根据匹配结果执行相应的代码。可以认为 switch 语句是编写多个 if-else 子句的替代方式。
有以下性质:
1.switch 表达式不需要为常量,甚至不需要为整数,case 是按照从上到下的顺序进行求值,直到找到匹配的。如果 switch 没有表达式,则对 true 进行匹配。因此,可以按照语言习惯将 if-else-if-else 链写成一个 switch。
2.switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,但是如果我们想匹配成功后继续执行后面的 case,可以使用 fallthrough 来解决这个问题 。
基本结构
switch var1 {
case val1:
...
case val2:
...
default:
...
}
代码示例
一个基本的switch语句
num := 10
switch num {
case 2:
fmt.Printf("num is %d\n", num)
case 6:
fmt.Printf("num is %d\n", num)
case 10:
fmt.Printf("num is %d\n", num)
default:
fmt.Printf("num is %d\n", num)
}
switch后面接前面定义的变量,同时case后面的表达式的类型要和switch后面的一致。
这里因为num等于10,所以会匹配case 10的那个分支并执行分支内的内容,然后跳出switch结构。
switch后面还可以什么也不加,如果switch后面没有表达式,则默认为表达式为true,按照上面的经验可知,下面对应的case后面也要是bool类型。
switch {
case true:
fmt.Println("true")
default:
fmt.Println("false")
}
另外一个情况,同样的如果switch后面没有表达式,case还可以接表达式。
b := 18
switch {
case b > 15 && b < 18: //像使用if一样加表达式
fmt.Println("15-17")
case b > 18 && b <= 30:
fmt.Println("18-30")
default:
fmt.Println("else")
}
因为case后面的表达式最终结果也是布尔类型的。
如果想在一个case匹配成功之后,继续匹配其他的case区域,可以使用fallthrough
var a = "hello"
switch a {
case "hello":
fmt.Print("hello ")// 不换行打印
fallthrough
case "dj":
fmt.Print("dj ")
fallthrough
default:
fmt.Print("666 ")
}
你会发现它会打印出 hello dj 666。
还可以在case后面加多个值,通过逗号间隔开
var a = "hello"
switch a {
case "hello", "dj":
fmt.Println("uccu onedaydayde")
}
后记
这里我们只介绍了switch的基本用法,当学了接口之后我们再去了解switch的另外一种用法-类型 switch。
Go by Example-Switch分支结构的更多相关文章
- go语言从例子开始之Example7.switch分支结构
switch ,方便的条件分支语句 package main import "fmt" import "time" func main() { 一个基本的 sw ...
- Python中实现switch分支结构
Python不像C/C++,Java等有switch-case的语法.不过其这个功能,比如用Dictionary以及lambda匿名函数特性来替代实现. 实现方法分为两步: 首先,定义一个字典: 其次 ...
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- JAVA if条件语句,switch多分支结构,与逻辑运算符
一.if条件语句 示例: import java.util.Scanner; public class Test{ public static void main(String[] args){ Sc ...
- Java 8- Java 分支结构 - if…else/switch
Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java有两种分支结构: if语句 switch语句 if语句 一个if语句包含 ...
- Java分支结构 - if...else/switch
Java分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java有两种分支结构: if语句 switch语句 if语句 一个if语句包含一 ...
- Java 分支结构 - if...else/switch
Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java 有两种分支结构: if 语句 switch 语句 if 语句 一个 i ...
- day04逻辑运算符短路、多分支结构(if和switch)、循环结构、while循环
复习 1.运算符和表达式 1)表达式 2)算数运算符 + - * / % 3)关系运算符 > < >= <= == != 4)逻辑运算符 && | ...
- PHP流程控制之分支结构switch语句的使用
分支结构switch语句的使用 还记得我们最开始讲了这么一个故事: 王同学家里头特别有钱,所以他的行程方式和正常人的又有些不一样. 他的出行方式呢有6种,如下: 1,司机开车2,民航3,自己家的专机4 ...
- JavaScript知识点:分支结构(if、switch)+算法例题
if-else分支 1.if条件应该是boolean类型的值或表达式 2.如果条件不是Boolean,会进行自动转换 以下几种情况会默认转换为 false: if(0).if(0.0) if(NaN) ...
随机推荐
- STM8 LED
时钟分频寄存器(CLK_CKDIVR) 举例 int main() { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //高速内部时钟1分频 GPIO_ ...
- sed 修改文件内容
修改命令对照表 练习实例 修改/etc/passwd中第1行第1个root为ROOT sed -i '1s/root/ROOT/' passwd 修改/etc/passwd中第5行到第10行中所有的/ ...
- Scyther-Compromise 协议形式化安全分析如何改进协议
1.最终的目的是如何将协议的不安全因素进行改进,提升安全性能.对协议中有关的加密和认证的过程进行形式化分析验证的时候通过添加敌手模型的(DY模型和eCK强安全模型),接受者和发送者之间的通信过程可能存 ...
- 阿里P7架构师是如何解决跨域问题的!你有遇到吗?
现在越来越多的项目就算是一个管理后端也偏向于使用前后端分离的部署方式去做,为了顺应时代的潮流,一前后端分离就产生了跨域问题,所以许多同学把跨域和前后端分离项目联系在了一起,其实跨域产生的原因并不是前后 ...
- python在算法题中判断输入结束(EOF)
有些算法题是这样要求的,一行输入一行数据,然后没有规定我要输入多少行,你要自行判断文件结束EOF,否则是会runtime error的,因为oj内部都是用文件来进行读写的. 例如a+b,每一行输入a ...
- bloomberg bulkfile【一】 文件的分类
文章导航 bloomberg bulkfile [一] 文件的分类 bloomberg bulkfile [二] 文件解析 bloomberg bulkfile [三] 在oracle的存储 订 ...
- [转]神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列
原文:https://www.cnblogs.com/youzhibing/p/11516154.html 这篇文章,对group by的讲解不错 -------------------------- ...
- centos中python2.7被覆盖,yum,python重新安装
参考如下,问题以解决,绝对有效 下载链接yum和python2.7网盘 链接:https://pan.baidu.com/s/1sC2crFW1I8F7zndJU0jjcA 提取码:5kia 直接参考 ...
- Jquery “This”的指向
JavaScript中的this不总是指向当前对象,函数或类中的this指向与调用这个函数的对象以及上下文环境是息息相关的.如在全局作用域调用一个含this的对象,此时当前对象的this指向的是win ...
- Vue项目中v-bind动态绑定src路径不成功
问题: 在做Vue项目的时候,由于项目需求,需要动态绑定img的src时,突然发现如果说是直接请求后台接口的图片地址就能显示, 但是直接动态绑定img的src的图片的相对路径或者是绝对路径的时候,图片 ...