2012-06-19 6 views

Respuesta

110

Break statements, The Go Programming Language Specification.

una "ruptura" declaración termina la ejecución de la más interior "para", "switch" o "seleccionar" comunicado.

BreakStmt = "break" [ Label ] . 

Si hay una etiqueta, debe ser la de un envolvente "para", "switch" o "seleccionar" declaración, y que es el que tiene la ejecución termina (§Para declaraciones, §Switch declaraciones, §Seleccione declaraciones).

L: 
    for i < n { 
     switch i { 
     case 5: 
      break L 
     } 
    } 

Por lo tanto, la declaración break en su ejemplo termina la declaración switch, la declaración "más profundo".

+1

¿Cuál es el caso de uso de 'break' en' select {} 'ya que solo se puede seleccionar un' caso'? –

+1

Porque incluso si se selecciona una sola caja, puede que tenga una implementación más larga que use break para terminar la ejecución de la caja, de forma similar a como puede regresar desde cualquier lugar de una función. –

0

Solo sale del bloque de interruptores.

6

Solo desde un bloque de interruptores. Hay muchos ejemplos en el código propio de Golang que puede examinar (compare inner break con outer break).

+0

ambos son enlaces rotos –

+0

@lukewendling fijo, gracias por darse cuenta de eso. – raina77ow

30

Un ejemplo de esperar ilustrativos:

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() 
// .... 
+0

Creo que la línea que dice: romper ciclo // como 'ir a B' – Jerred

2

esto debería explicarlo.

for{ 
    x := 1 
    switch { 
    case x >0: 
     fmt.Println("sjus") 
    case x == 1: 
     fmt.Println("GFVjk") 
    default: 
     fmt.Println("daslkjh") 
    } 
} 
} 

Se ejecuta siempre

for{ 
    x := 1 
    switch { 
    case x >0: 
     fmt.Println("sjus") 
     break 
    case x == 1: 
     fmt.Println("GFVjk") 
    default: 
     fmt.Println("daslkjh") 
    } 
} 
} 

Una vez más, se ejecuta 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

+0

Su respuesta es solo una copia/pega de las respuestas anteriores ... – Arkan

+3

hmmm Incluí un enlace de ir a la reproducción, que podría ser útil. –

+0

me encanta el último expreso ... claro? –

3

Sí, break rompe el interior switch. Otra copiar/pegar para parque infantil:

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. 
0

Otro uso de la pausa para el interruptor está en combinación con la declaración fallthrough. Puede que necesite algo de creatividad para usarlo correctamente en la situación correcta, pero posiblemente sea una combinación utilizable.

Aquí es simple ejemplo:

a := 25 
fallThrough := true 

switch { 
case a > 10 : 
    fmt.Println("a>10") 
    if fallThrough != true { 
     break 
    } 
    fallthrough 
case a > 20: 
    fmt.Println("a>20") 
} 
Cuestiones relacionadas