visual vbnet usar switch studio net como comando select switch-statement go break

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 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?

http://play.golang.org/p/GOvnfI67ih