在Go中,断开语句是否从开关/select中断开?

我知道switch / select语句会在每个case后自动中断。 我想知道,在下面的代码:

 for { switch sometest() { case 0: dosomething() case 1: break default: dosomethingelse() } } 

break语句是否退出for循环或者只是switch块?

Break语句,Go编程语言规范。

“break”语句终止最里面的“for”,“switch”或“select”语句的执行。

 BreakStmt = "break" [ Label ] . 

如果有一个标签,它必须是一个封闭的“for”,“switch”或“select”语句,这是执行终止的语句(§For语句,§Switch语句,§Select语句)。

 L: for i < n { switch i { case 5: break L } } 

因此,在你的例子中的break语句终止switch语句,即“最内层”语句。

一个希望的例子:

 loop: for { switch expr { case foo: if condA { doA() break // like 'goto A' } if condB { doB() break loop // like 'goto B' } doC() case bar: // ... } A: doX() // ... } B: doY() // .... 

只是从一个开关块。 Golang自己的代码可以检查很多例子(比较内部break和outer break )。

是的, break了内部switch 。 另一个游乐场的复制/粘贴:

https://play.golang.org/p/SZdDuVjic4

 package main import "fmt" func main() { myloop:for x := 0; x < 7; x++ { fmt.Printf("%d", x) switch { case x == 1: fmt.Println("start") case x == 5: fmt.Println("stop") break myloop case x > 2: fmt.Println("crunching..") break default: fmt.Println("idling..") } } } 
 0idling.. 1start 2idling.. 3crunching.. 4crunching.. 5stop Program exited. 

这应该解释它。

 for{ x := 1 switch { case x >0: fmt.Println("sjus") case x == 1: fmt.Println("GFVjk") default: fmt.Println("daslkjh") } } } 

永远运行

 for{ x := 1 switch { case x >0: fmt.Println("sjus") break case x == 1: fmt.Println("GFVjk") default: fmt.Println("daslkjh") } } } 

再次,永远运行

 package main import "fmt" func main() { d: for{ x := 1 switch { case x >0: fmt.Println("sjus") break d case x == 1: fmt.Println("GFVjk") default: fmt.Println("daslkjh") } } } 

将打印sjus …清除?

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

它只能从开关块中退出。