В Go оператор break прерывается от переключателя / select?
Я знаю, что switch
/select
операторы ломаются автоматически после каждого случая. Мне интересно, в следующем коде:
for {
switch sometest() {
case 0:
dosomething()
case 1:
break
default:
dosomethingelse()
}
}
тут break
оператор exit the for
петля или просто switch
блок?
7 ответов:
, элементинструкции Break, спецификация языка программирования Go.
оператор "break" завершает выполнение самого внутреннего " for", оператор" switch "или" select".
BreakStmt = "break" [ Label ] .
если есть метка, она должна быть вшита "за", "переключатель" или оператор "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() // ....
да
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.
только из блока переключения. В собственном коде Golang есть много примеров, которые вы можете изучить (сравните внутренний разрыв С внешний разрыв).
Это следует объяснить.
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 ... ясно ?
другая польза перерыва для переключателя в комбинации с оператором fallthrough. Возможно, потребуется некоторое творчество, чтобы правильно использовать его в правильной ситуации, но это, возможно, полезная комбинация.
вот простой пример:
a := 25 fallThrough := true switch { case a > 10 : fmt.Println("a>10") if fallThrough != true { break } fallthrough case a > 20: fmt.Println("a>20") }