在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 …清除?
它只能从开关块中退出。