Salir de bucles anidados con goto
Salir de bucles anidados puede ser engorroso utilizando break, ya que generalmente requiere lógica adicional y variables. goto simplifica este proceso al permitir saltos directos fuera de múltiples bucles.
Ejemplo: Usando goto para salir de bucles anidados
- Crea un nuevo archivo llamado
nested_loop_with_goto.go:
cd ~/project
touch nested_loop_with_goto.go
- Escribe el siguiente código:
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ { // Outer loop
for j := 0; j < 5; j++ { // Inner loop
if j == 3 { // Exit condition
goto END // Jump to the "END" label
}
fmt.Println(i, j) // Print the current values of i and j
}
}
END:
}
- El programa comienza con un bucle anidado: un bucle exterior para
i y un bucle interior para j.
- Dentro del bucle interior, verifica si
j es igual a 3. Si es verdadero, el programa salta a la etiqueta END, saliendo de ambos bucles.
- Como resultado, el programa imprime las parejas
(i, j) solo hasta que j es igual a 2.
- Ejecuta el programa:
go run nested_loop_with_goto.go
- Observa la salida:
0 0
0 1
0 2
Este enfoque es mucho más limpio que usar múltiples declaraciones break o banderas (flags), especialmente en bucles profundamente anidados.
Si usamos la declaración break para implementar este programa, como se muestra a continuación:
package main
import "fmt"
func main() {
// Check variable
var check = false
// First loop
for i := 0; i < 5; i++ {
// Second loop
for j := 0; j < 5; j++ {
if j == 3 {
// Exit the second loop
check = true
break
}
fmt.Println(i, j)
}
// Determine whether to exit the first loop
if check == true {
break
}
}
}