Sentencia break en Go
En Go, la sentencia break se utiliza para terminar la ejecución del bucle actual o de la sentencia switch, y salir del bloque de código de ese bucle o sentencia switch.
La sentencia break se puede usar en los siguientes aspectos:
- Se usa en sentencias de bucle para salir del bucle y comenzar a ejecutar las sentencias posteriores al bucle.
- break en la sentencia switch tiene la función de salir de la sentencia después de ejecutar un case.
- break se puede aplicar en la sentencia select.
- En bucles múltiples (anidados), se puede usar una etiqueta (label) para indicar el bucle del que se desea salir con break.
Sintaxis
La sintaxis de break es la siguiente:
break
El diagrama de flujo de la sentencia break es el siguiente:

Ejemplo
Usar break en un bucle for:
Ejemplo
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
break // Cuando i sea igual a 5, sale del bucle
}
fmt.Println(i)
}
}
Resultado:
0 1 2 3 4
Salir del bucle cuando la variable a sea mayor que 15:
Ejemplo
import "fmt"
func main() {
/* Definir variables locales */
var a int = 10
/* Bucle for */
for a < 20 {
fmt.Printf("El valor de a es : %d\n", a);
a++
if a > 15 {
/* Cuando a sea mayor que 15, usa la sentencia break para salir del bucle */
break
}
}
}
En el ejemplo anterior, cuando el valor de a es mayor que 15, se ejecuta la sentencia break y todo el bucle se termina. El resultado de la ejecución es:
a 的值为 : 10 a 的值为 : 11 a 的值为 : 12 a 的值为 : 13 a 的值为 : 14 a 的值为 : 15
El siguiente ejemplo tiene bucles múltiples y demuestra la diferencia entre usar una etiqueta y no usarla:
Ejemplo
import "fmt"
func main() {
// Sin usar etiqueta
fmt.Println("---- break ----")
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break
}
}
// Usando etiqueta
fmt.Println("---- break label ----")
re:
for i := 1; i <= 3; i++ {
fmt.Printf("i: %d\n", i)
for i2 := 11; i2 <= 13; i2++ {
fmt.Printf("i2: %d\n", i2)
break re
}
}
}
El resultado de ejecutar el ejemplo anterior es:
---- break ---- i: 1 i2: 11 i: 2 i2: 11 i: 3 i2: 11 ---- break label ---- i: 1 i2: 11
Usar break en una sentencia switch:
Ejemplo
func main() {
day := "Tuesday"
switch day {
case "Monday":
fmt.Println("It's Monday.")
case "Tuesday":
fmt.Println("It's Tuesday.")
break // Salir de la sentencia switch
case "Wednesday":
fmt.Println("It's Wednesday.")
}
}
Resultado:
It's Tuesday.
Usar break en una sentencia select:
Ejemplo
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
time.Sleep(2 * time.Second)
ch1 <- 1
}()
go func() {
time.Sleep(1 * time.Second)
ch2 <- 2
}()
select {
case <-ch1:
fmt.Println("Received from ch1.")
case <-ch2:
fmt.Println("Received from ch2.")
break // Salir de la sentencia select
}
}
Resultado:
Received from ch2.
En Go, la aplicación de la sentencia break en la sentencia select es relativamente especial. Debido a las características de la sentencia select, break no se puede usar directamente para salir de la propia sentencia select, porque select es no bloqueante y espera a que todas las operaciones de comunicación estén listas. Si se necesita finalizar la ejecución de la sentencia select antes de tiempo, se pueden usar las sentencias return o goto para lograr el mismo efecto.
El siguiente ejemplo muestra el uso de return en una sentencia select para finalizar la ejecución antes de tiempo:
Ejemplo
import (
"fmt"
"time"
)
func process(ch chan int) {
for {
select {
case val := <-ch:
fmt.Println("Received value:", val)
// Ejecutar algo de lógica
if val == 5 {
return // Terminar prematuramente la ejecución de la sentencia select
}
default:
fmt.Println("No value received yet.")
time.Sleep(500 * time.Millisecond)
}
}
}
func main() {
ch := make(chan int)
go process(ch)
time.Sleep(2 * time.Second)
ch <- 1
time.Sleep(1 * time.Second)
ch <- 3
time.Sleep(1 * time.Second)
ch <- 5
time.Sleep(1 * time.Second)
ch <- 7
time.Sleep(2 * time.Second)
}
En el ejemplo anterior, la función process usa una sentencia select en un bucle infinito para esperar datos en el canal ch. Cuando recibe datos, ejecuta alguna lógica. Cuando el valor recibido es igual a 5, usa return para finalizar la ejecución de la sentencia select antes de tiempo.
Resultado:
No value received yet. No value received yet. Received value: 1 No value received yet. Received value: 3 No value received yet. Received value: 5
Al usar return, podemos terminar la ejecución anticipadamente en la sentencia select y volver al código del llamador.
Es importante tener en cuenta que usar la sentencia return termina inmediatamente la ejecución de la función actual, por lo que debes decidir según tus necesidades reales qué método usar para finalizar la ejecución anticipadamente en la sentencia select.
Otras extensiones
Sentencias de bucle en Go