博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go语言流程控制中的break,continue和goto(七)
阅读量:4884 次
发布时间:2019-06-11

本文共 1810 字,大约阅读时间需要 6 分钟。

break(跳出循环)

break用于跳出整个循环,如下:

func main() {    for i:=0;i<10;i++{        if i>3{            break        }        fmt.Println(i)    }} // 0 1 2 3

代码里只会打印到3,当大于3时会跳出整个for循环,注意整个for循环指的是直接包含break的那层for循环,举个例子:

func main() {    for i:=0;i<10;i++{        for j:=0;j<10;j++ {            if j == 5 {                break            }            fmt.Printf("%v-%v\n",i, j)        }    }}

查看上述代码的结果,就会发现内层循环只能打印到4,而外层循环可以到9(即走完了整个for循环)。

 

除此之外,我们还可以使用标签来退出指定循环。改造上面的双层循环代码,如下:

func main() {    EX:    for i:=0;i<10;i++{        for j:=0;j<10;j++ {            if j == 5 {                break EX            }            fmt.Printf("%v-%v\n",i, j)        }    }}

我在最外层for循环上面加一个 EX 标签,然后 break EX,此时的结果就是当j==5时,从最外面的for循环退出来了。为了对比,可以再试下:

func main() {    for i:=0;i<10;i++{        EX:        for j:=0;j<10;j++ {            if j == 5 {                break EX            }            fmt.Printf("%v-%v\n",i, j)        }    }}

其实这种写法跟不加标签是一样的效果,上面也说到了,break是退出当前包含它的循环的。

 

continue(继续下一次循环)

continue 是继续下一次的循环,与 break 的区别就是不跳出整个循环,只跳过此次循环:

func main() {    for i:=0;i<10;i++{        if i==5{            continue        }        fmt.Println(i)    }}// 跳过了5,继续后面的循环// 0 1 2 3 4 6 7 8 9

 

continue 也支持标签写法:

func main() {    EX:    for i:=0;i<10;i++{        for j:=0;j<10;j++ {            if j == 5 {                continue EX            }            fmt.Printf("%v-%v\n",i, j)        }    }}

 

goto(跳转到指定标签)

goto是个好东西,它可以跳转到我们指定的标签,从而执行那部分代码,例子:

func main() {    for i:=0;i<10;i++{        for j:=0;j<10;j++ {            if j == 5 {                goto breakTag            }            fmt.Printf("%v-%v\n",i, j)        }        breakTag:            break    }}

如上代码,当 j==5 时,使用goto跳转到breakTag标签处,而这个标签下执行了break(注意break位置),从而使得最外层的for循环中断,是不是很好用。但是一般不主张使用goto语句,可能是因为太灵活反而容易造成程序混乱。

转载于:https://www.cnblogs.com/wjaaron/p/11496696.html

你可能感兴趣的文章
5.6.3.4 trim()方法
查看>>
Cookie、Session和自定义分页
查看>>
SQL演练
查看>>
React Antd中样式的修改
查看>>
Spring 应用外部属性文件 配置 context 错误
查看>>
导入lxml找不到etree,报ImportError:DLL load failed:找不到指定的程序
查看>>
面向对象一
查看>>
大象的崛起!Hadoop七年发展风雨录
查看>>
图片二值化
查看>>
数据库常用函数
查看>>
集合之TreeSet(含JDK1.8源码分析)
查看>>
C语言学习的记忆
查看>>
Lucene学习总结之三:Lucene的索引文件格式(1) 2014-06-25 14:15 1124人阅读 ...
查看>>
node-sass 报错的解决方法
查看>>
Python:GeoJson格式的多边形裁剪Tiff影像并计算栅格数值
查看>>
免费下载知网文献的方法 | sci-hub免费下载SCI论文方法
查看>>
测试用例,变量之间,相互调用的方法,和修改原来初始化变量的方法
查看>>
ASP.NET MVC中将控制器分离到类库的实现(转)
查看>>
Poj 2304 Combination Lock(模拟顺、逆时钟开组合锁)
查看>>
Palindrome Number
查看>>