为什么这个Go Lang代码永远没有中断标签?

时间:2014-06-24 08:29:31

标签: go

我想弄清楚标签是如何分解的。

我希望以下程序永远保持打印“在if语句中”。这是因为break here语句将代码执行带回到循环的开头,然后应该反复执行。

但是,此代码仅执行一次。我在这里缺少什么?

package main

import "fmt"

func main() {
here:
    for {
        fmt.Println("In if statement")
        break here

    }
    fmt.Println("At the bottom")
}

执行结果:

In if statement
At the bottom

Program exited.

http://play.golang.org/p/y9kH1YZezJ

2 个答案:

答案 0 :(得分:8)

  

这是因为break here语句将代码执行带回到循环的开头

不,这不是什么休息。这不是一个转到。 退出标有标签的循环。 循环后继续执行。

在这个特定的例子中,标签是不必要的,你可以通过默认情况下突破最里面的循环(没有标签)得到相同的结果。

答案 1 :(得分:8)

来自break statements上的go规范:

  

如果有标签,则必须是封闭的"对于","开关"或"选择"声明,是执行终止的

break语句不会将代码带回标签,它会关闭标签引用的循环。所以一切都很好......