zoukankan      html  css  js  c++  java
  • golang label breaks

    我们在for多层嵌套时,有时候需要直接跳出所有嵌套循环, 这时候就可以用到go的label breaks特征了。

    先看一个范例代码:

    package main

    import (
        "fmt"
    )

    func main() {
        fmt.Println("1")

    Exit:
        for i := 0; i < 9; i++ {
            for j := 0; j < 9; j++ {
                if i+j > 15 {
                    fmt.Print("exit")
                    break Exit
                }
            }
        }

        fmt.Println("3")
    }

    执行效果:

    image

    注意,

    • label要写在for循环的开始而不是结束的地方。和goto是不一样的。虽然它是直接break退出到指定的位置。

    break的标签和goto的标签的区别可以参考下面代码:

    JLoop:
        for i := 0; i < 10; i++ {
            fmt.Println("label i is ", i)
            for j := 0; j < 10; j++ {
                if j > 5 {
                    //跳到外面去啦,但是不会再进来这个for循环了
                    break JLoop
                }
            }
        }

        //跳转语句 goto语句可以跳转到本函数内的某个标签
        gotoCount := 0
    GotoLabel:
        gotoCount++
        if gotoCount < 10 {
            goto GotoLabel //如果小于10的话就跳转到GotoLabel
        }

     

    break 标签除了可以跳出 for 循环,还可以跳出 select switch 循环, 参考下面代码:

    L:
        for ; count < 8192; count++ {
            select {
            case e := <-self.pIdCh:
                args[count] = e

            default:
                break L // 跳出 select 和 for 循环
            }

        }

     

     

    参考:

    译:go’s block and identifiers scope
    http://studygolang.com/articles/1438

  • 相关阅读:
    POJ 2407 Relatives 欧拉函数
    HDU 4704 Sum 超大数幂取模
    HDU 4699 Editor 维护栈
    HDU 4696 Answers 水题
    HDU 4686 Arc of Dream 矩阵
    [转]高斯消元题集
    [转]计算几何题集
    POJ 2981 Strange Way to Express Integers 模线性方程组
    Linux 设置文件默认打开方式
    FZU 1402 猪的安家 中国剩余定理
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4283248.html
Copyright © 2011-2022 走看看