Go Controle de fluxo Básico
if, for e switch
Em Go, o controle de fluxo é feito com if, for e switch. O if pode ter uma instrução de inicialização antes da condição, o for é o único laço de repetição e o switch não precisa de break para evitar a queda nos casos seguintes. Essas construções tornam o código mais limpo e expressivo.
O if com init permite declarar variáveis temporárias visíveis apenas dentro do bloco condicional, útil para evitar poluição de escopo. O for pode ser usado de várias formas: como laço infinito, como while e como iteração com range sobre slices, maps, strings, etc. O switch é flexível: pode ser sem expressão, com múltiplos valores por caso e sem break automático.
Dominar essas estruturas é essencial para escrever algoritmos claros e idiomáticos em Go. A ausência de break no switch evita erros comuns de outras linguagens e o range simplifica a iteração sobre coleções.
Pontos-chave
ifpode ter uma instrução de inicialização antes da condição:if x := f(); x > 0 { ... }.foré o único laço em Go; pode ser usado comowhileou laço infinito.rangeitera sobre slices, arrays, maps, strings e canais, retornando índice e valor.switchnão precisa debreak; cada caso é exclusivo por padrão.switchsem expressão é equivalente aswitch truee permite condições em cada caso.
package main
import "fmt"
func main() {
// if com init: variável 'x' visível apenas no bloco if/else
if x := 10; x > 5 {
fmt.Println("x é maior que 5")
} else {
fmt.Println("x é menor ou igual a 5")
}
// for como while
i := 0
for i < 3 {
fmt.Println("i =", i)
i++
}
// for com range sobre slice
frutas := []string{"maçã", "banana", "laranja"}
for indice, fruta := range frutas {
fmt.Printf("%d: %s\n", indice, fruta)
}
// switch sem break
nota := 8
switch {
case nota >= 9:
fmt.Println("Excelente")
case nota >= 7:
fmt.Println("Bom")
default:
fmt.Println("Precisa melhorar")
}
}