Відповіді:
Переклади заяви, специфікація мови програмування Go.
Оператор "break" завершує виконання найпотаємнішого оператора "for", "switch" або "select".
BreakStmt = "break" [ Label ] .
Якщо є мітка, вона повинна бути такою, що додається оператором "for", "switch" або "select", і це той, виконання якого завершується (§Для виписок, §Shitch-операторів, §Select операторів).
L: for i < n { switch i { case 5: break L } }
Тому break
твердження у вашому прикладі припиняє switch
твердження, "найпотужніше" твердження.
Так, 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 ... ясно?
break
внутрішньої,select {}
оскількиcase
можна вибрати лише одну ?