Saindo de Loops Aninhados com goto
Sair de laços aninhados pode ser complicado usando break, pois normalmente requer lógica e variáveis adicionais. goto simplifica este processo, permitindo saltos diretos para fora de múltiplos laços.
Exemplo: Usando goto para Sair de Laços Aninhados
- Crie um novo arquivo chamado
nested_loop_with_goto.go:
cd ~/project
touch nested_loop_with_goto.go
- Escreva o seguinte 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:
}
- O programa começa com um laço aninhado: um laço externo para
i e um laço interno para j.
- Dentro do laço interno, ele verifica se
j é igual a 3. Se verdadeiro, o programa salta para o rótulo END, saindo de ambos os laços.
- Como resultado, o programa imprime os pares
(i, j) apenas até que j seja igual a 2.
- Execute o programa:
go run nested_loop_with_goto.go
- Observe a saída:
0 0
0 1
0 2
Esta abordagem é muito mais limpa do que usar múltiplas instruções break ou flags, especialmente em laços profundamente aninhados.
Se usarmos a instrução break para implementar este programa, como mostrado abaixo:
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
}
}
}