vbnet - En Go, ¿se rompe un enunciado break desde un switch/select?
switch en visual net (7)
Sé que las declaraciones switch
/ select
rompen automáticamente después de cada caso. Me pregunto, en el siguiente código:
for {
switch sometest() {
case 0:
dosomething()
case 1:
break
default:
dosomethingelse()
}
}
¿La instrucción break
sale del ciclo for
o simplemente del bloque switch
?
Declaraciones de interrupción, la especificación del lenguaje de programación Go.
Una instrucción "break" termina la ejecución de la declaración "for", "switch" o "select" más interna.
BreakStmt = "break" [ Label ] .
Si hay una etiqueta, debe ser una declaración adjunta "para", "cambiar" o "seleccionar", y esa es aquella cuya terminación termina (§Para declaraciones, §Conseraciones de conmutación, §Selección de instrucciones).
L: for i < n { switch i { case 5: break L } }
Por lo tanto, la instrucción break
en su ejemplo termina la instrucción switch
, la declaración "más interna".
Otro uso de la ruptura para el interruptor está en combinación con la declaración de caída. Puede que necesite algo de creatividad para usarlo correctamente en la situación correcta, pero posiblemente sea una combinación utilizable.
Aquí hay un ejemplo simple:
a := 25
fallThrough := true
switch {
case a > 10 :
fmt.Println("a>10")
if fallThrough != true {
break
}
fallthrough
case a > 20:
fmt.Println("a>20")
}
Sí, break
rompe el switch
interno.
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 desde un bloque de interruptor. Hay muchos ejemplos en el código propio de Golang que puede examinar (compare la ruptura interna con la ruptura externa ).
Solo sale del bloque de interruptores.
Un ejemplo con suerte ilustrativo:
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()
// ....
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, se ejecuta para 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?