Respuestas:
Declaraciones de ruptura, The Go Programming Language Specification.
Una instrucción "break" termina la ejecución de la instrucción "for", "switch" o "select" más interna.
BreakStmt = "break" [ Label ] .
Si hay una etiqueta, debe ser la de una declaración "for", "switch" o "select" adjunta, y esa es aquella cuya ejecución finaliza (§For declaraciones, §Switch declaraciones, §Seleccione declaraciones).
L: for i < n { switch i { case 5: break L } }
Por lo tanto, la break
declaración en su ejemplo termina la switch
declaración, la declaración "más interna".
Sí, break
rompe lo interno 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.
Solo de un bloque de interruptores. Hay muchos ejemplos en el propio código de Golang que puede examinar (compare la ruptura interna con la ruptura externa ).
Esto debería explicarlo.
for{
x := 1
switch {
case x >0:
fmt.Println("sjus")
case x == 1:
fmt.Println("GFVjk")
default:
fmt.Println("daslkjh")
}
}
}
Corre por siempre
for{
x := 1
switch {
case x >0:
fmt.Println("sjus")
break
case x == 1:
fmt.Println("GFVjk")
default:
fmt.Println("daslkjh")
}
}
}
De nuevo, corre por siempre
PERO
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")
}
}
}
imprimirá sjus ... claro?
break
interiorselect {}
ya que solo secase
puede seleccionar uno?