Go语言流程控制中的break,continue和goto

Posted wjaaron

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言流程控制中的break,continue和goto相关的知识,希望对你有一定的参考价值。

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循环中断,是不是很好用。

以上是关于Go语言流程控制中的break,continue和goto的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 基础 — 控制流:流程控制

Java中的break,continue关于标签的用法(转载)

2.8 Go语言中的for循环, break和continue

Go语言 break和continue

Go语言基础:运算符_流程控制循环_数组_切片

Go语言基础:运算符_流程控制循环_数组_切片