您现在的位置是:首页 > 文章详情

golang的switch语句使用fallthrough

日期:2020-04-02点击:709

很多的教程在说明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很不常用, 所以我范了这么低级的理解错误, 这么多年也没有"翻车".

原文链接:https://yq.aliyun.com/articles/753139
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章