Go语言之continue/break label(五)
前言介绍:本人原本是C++开发工程师,使用C++已经有8年多的时间,最近在学习Go语言,在学习Go语言的时候,难免会拿Go语言与C++语言做一些比较。
一、写在前面的话:
最近碰到了,Go语言一个比较有趣的语法continue label和break label,这种语法C/C++却没有,但是却有与之类似的goto。不过C/C++中一般不喜欢也不推荐使用goto,原因是goto语句跳来跳去,很容易将代码的可读性降低,并且很容易出错,所以C/C++都不推荐使用goto语句。
至于Go为何保留goto语句,想来是因为goto语句的另外一件好处吧,就是对深层次的函数调用或者递归调用,可以直接跳出来。
二、内容介绍
本文提到的continue label和break label于goto语句有些类似,但是两者使用却不相同。
continue和break一般针对的都是使用它们最近的循环语句,用来终端后续操作或者中断整个循环。
下面是continue和break的使用例子:




在一层循环里面,continue label和break label于上面的continue和break并没有区别,执行的结果也是一样的,continue label用来中断循环的本次操作,break label用于中断本次循环。




在二次循环以上,break和break label的区别就显现出来了,break会中断本次循环并且继续之后循环之后的语句。break label 不单单会终止本次循环,还会跳转到label处,如此以来break label所在的那层循环之后的代码也不会被执行到。


在二次循环之中,continue和continue label的区别也比较明显,continue只是中断循环的本一次操作,后续循环语句都会继续执行。continue label则是在内部循环的那一次操作终止之后,立马跳到label处继续上一层的下一次循环操作,而continue所在的那层循环之外的语句都会被跳过,这也就是为什么Skip :index: i 一致没有打印出来的原因。


三、总结概括
综上所述,continue label 是终止它所归属的最内循环的当前循环次数,并且跳转到label处继续执行,它所对应循环之后的那部分code不会被执行到。
break label是终止它所归属的最内循环整个循环,然后跳到label处开始执行,它所对一个的循环之后的那部分code不会被执行。
continue是终止执行它所归属的最内层循环的当前次数,并且继续执行 该循环的后续操作,该循环之外的后续代码也会继续执行。
break是 终止执行它所它所归属的那次循环的整个循环操作,然后执行该循环之后的后续代码。
灰子做于二零一九年五月二十二日。
【原创作品,欢迎分享,请勿转载,谢谢尊重!!】