golang的switch语句使用fallthrough
很多的教程在说明golang的switch时,都会特别指明,switch语句不会自动向下贯穿, 因此不必在每一个case子句的末尾都添加一个break语句,有些书本说明, 需要向下贯穿的时候, 显示调用fallthrough语句.
对于有些人来说, 对于这句话的理解是: 当case语句匹配后, 显示调用fallthrough语句, 那么就会接着判断下一个case条件. 我之前就是这么理解的, 有些书也是这么理解, 并且这么举例的. 网上很多的教程, 也是错误的.
《学习go语言》的p12:
它不会匹配失败后自动向下尝试, 但是可以使用fallthrough 使其这样做。没有fallthrough:
switch i { case 0: // 空的case 体 case 1: f() // 当i == 0 时,f 不会被调用! }
而这样:
switch i { case 0: fallthrough case 1: f() // 当i == 0 时,f 会被调用! }
事实上, 这样的理解是错误的。
《go web编程》的p56:
在第5行中,我们把很多值聚合在了一个 case 里面,同时,Go里面 switch 默认相当于每个 case 最后带有 break ,匹配成功后不会自动向下执行其他case,而是跳出整个 switch , 但是可以使用 fallthrough 强制执行后面的case代码。
integer := 6 switch integer { case 4: fmt.Println("The integer was <= 4") fallthrough case 5: fmt.Println("The integer was <= 5") fallthrough case 6: fmt.Println("The integer was <= 6") fallthrough case 7: fmt.Println("The integer was <= 7") fallthrough case 8: fmt.Println("The integer was <= 8") fallthrough default: fmt.Println("default case") }
上面的程序将输出
The integer was <= 6 The integer was <= 7 The integer was <= 8 default case
此书的说法和例子都没有错, 但不够直白, 象我这样看书不认真的人, 就错过了重点.
写得比较浅显直白的, 是《go 学习笔记》p26:
如需要继续下一分支,可使用 fallthrough,但不再判断条件。
x := 10 switch x { case 10: println("a") fallthrough case 0: println("b") }
输出:
a b
runoob.com里的教程, 是写得最清楚明白的:
使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。
package main import "fmt" func main() { switch { case false: fmt.Println("1、case 条件语句为 false") fallthrough case true: fmt.Println("2、case 条件语句为 true") fallthrough case false: fmt.Println("3、case 条件语句为 false") fallthrough case true: fmt.Println("4、case 条件语句为 true") case false: fmt.Println("5、case 条件语句为 false") fallthrough default: fmt.Println("6、默认 case") } }
以上代码执行结果为:
2、case 条件语句为 true 3、case 条件语句为 false 4、case 条件语句为 true
从以上代码输出的结果可以看出:switch 从第一个判断表达式为 true 的 case 开始执行,如果 case 带有 fallthrough,程序会继续执行下一条 case,且它不会去判断下一个 case 的表达式是否为 true。
让我庆幸的是, fallthrough很不常用, 所以我范了这么低级的理解错误, 这么多年也没有"翻车".
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
怎样用Python绘制诱人的桑基图?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 01 桑基是何许图也 据笔者不严谨的抽样提问统计,90%想学习桑基图的旁友,都是被她妖艳炫酷的外表所吸引。 而桑基图真正代表了什么?和类似图表相比的独特性是什么?却几乎无人问津。 害!人真的是视觉动物! 言归正传,我们来看看百科的官方解释: 桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的"蒸汽机的能源效率图"而闻名,此后便以其名字命名为"桑基图"。 Emmm,有点内个意思了,结合其他资料,做进一步的汇总提炼: 桑基两个字取自“发明”者的名字 属于流程图的一种,核心在于展示数据的流转 主要由节点、边和流量三要素构成,边越宽代表流量越大 遵循守恒定律,无论怎么流动,开端和末端数据总是一致的 文字太苍白,下面我们用Python来绘制一个具体的实例~ 02 Pyth...
- 下一篇
聊聊大前端网络安全那些事
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 网络安全对前端童鞋来说大多数时候都是听其有之,闻之则无,毕竟在现如今前端如火如荼的时代,大多数东西日益成熟,开箱即用,云服务、框架等已经帮我们做了安全方面的防范,不需要我们去太过于关心前端网络安全,作为一个前端爱好者,最近温习一下这部分知识,做了个简单的总结,顺道呈现给各位看官,请注意查收。 xss攻击 Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。 根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种 1.1 存储型攻击 存储型攻击常发生在微博论坛等用户发帖、提交文章评论等地方。 1.将恶意代码提交到数据库 2.数据库将其保存 3.他用户查看帖子或者评论 4.服务端返回恶意代码并被拼接到客户端页面 5.恶意代码可能通过自执行或者用户点击执行来弹出广告或者获取用户的c...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7