Я знаю, что операторы switch
/ select
автоматически прерываются после каждого случая. Мне интересно, в следующем коде:
for {
switch sometest() {
case 0:
dosomething()
case 1:
break
default:
dosomethingelse()
}
}
Имеет ли break
выход заявление в for
петлю или только switch
блок?
break
внутри, если можно выбратьselect {}
только одноcase
?Надеюсь, показательный пример:
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..") } } }
источник
Просто из блока переключателей. В собственном коде 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") } } }
напечатает сюс ... ясно?
http://play.golang.org/p/GOvnfI67ih
источник
Он только выходит из блока переключателей.
источник
Этот вопрос может быть уже слишком старым, но я все же думаю, что ярлык затрудняет чтение нашего кода. Вместо того, чтобы нарушать внутренний выбор for, просто установите флаг для цикла и обработайте его внутри select-case перед вызовом break. Например:
loop := true for loop { select { case <-msg: // do your task here case <-ctx.Done(): loop = false break } }
источник