• 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
    ",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
    ",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
    ",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
    ",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
    ",i, j)
            }
            breakTag:
                break
        }
    }

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

  • 相关阅读:
    System.IO.MemoryStream.cs
    System.IO.Stream.cs
    System.Web.HttpContext.cs
    System.Text.Encoding.cs
    System.Web.HttpRuntime.cs
    System.Web.Caching.Cache.cs
    System.Diagnostics.Stopwatch.cs
    FrameBuffer
    Java实现 洛谷 P1422 小玉家的电费
    Java实现 洛谷 P1422 小玉家的电费
  • 原文地址:https://www.cnblogs.com/wjaaron/p/11496696.html
Copyright © 2020-2023  润新知