break e continue ajustam o fluxo de loop e select, enquanto os rótulos permitem que você direcione um for, switch ou select externo quando a lógica aninhada, de outra forma, precisaria de flags ou condições duplicadas.
Usados com moderação, os rótulos esclarecem a intenção; usados em excesso, obscurecem a estrutura.
Cartão de referência rápida - pronto para copiar e colar.
package mainimport "fmt"func main() { for i := 0; i < 5; i++ { if i == 2 { continue // pula a impressão de 2 } if i == 4 { break // para antes de 4 } fmt.Println(i) }}
Quando usar isso:
Use continue para pular iterações irrelevantes sem aninhar outro corpo if.
Use break quando iterações adicionais não puderem alterar o resultado (alvo encontrado, erro).
Use break rotulado para sair de uma busca em loops aninhados sem booleanos found.
Extraia uma função quando mais de um rótulo ou múltiplas saídas tornarem o fluxo difícil de escanear.
// Prefira retorno antecipado em vez de break rotulado ao calcular um resultadofunc contains(haystack []string, needle string) bool { for _, s := range haystack { if s == needle { return true } } return false}
break sai apenas do select - for { select { case <-done: break } } entra em loop infinito. Correção: use break loop com um rótulo no for, ou return.
continue rotulado em switch - continue visa apenas loops, não switch. Correção: reestruture ou use return.
Variáveis de flag em vez de rótulos - booleanos found com múltiplos níveis de break confundem os leitores. Correção: rotule uma vez ou extraia uma função.
continue pula a lógica de atraso - Colocar continue antes do rate limiting causa loops apertados. Correção: coloque o throttling após a verificação de continue ou no final do loop.
Saindo de defer - break não cruza limites de função. Correção: use return do helper.
goto como substituto - Saltos sem rótulo prejudicam a legibilidade. Correção: prefira fluxo de controle estruturado e funções.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão GC Green Tea, go fix modernizers - verifique o patch na compilação), chi (última - verifique na compilação), gin (última - verifique na compilação), echo (última - verifique na compilação), google.golang.org/grpc (última - verifique na compilação), sigs.k8s.io/controller-runtime (última - verifique na compilação), kubebuilder (última - verifique na compilação), tinygo (última - verifique os alvos de placa na compilação), wazero (última - verifique na compilação), e golangci-lint (última - verifique o conjunto de linters na compilação).
NzA2MjAyfDg5M29pZ2N8b2kuc2VkaXVnZWRvYw==
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026