Tratamento de Erros
Valores de erro explícitos e encapsulamento. Os resultados aparecem na mesma seção de código: comentários // na mesma linha quando curtos, blocos // de múltiplas linhas abaixo da amostra quando não.
Busque em todas as páginas da documentação
Valores de erro explícitos e encapsulamento. Os resultados aparecem na mesma seção de código: comentários // na mesma linha quando curtos, blocos // de múltiplas linhas abaixo da amostra quando não.
Erros sentinela ou de mensagem simples.
err := errors.New("boom")
err.Error() // "boom"Encapsula com %w para errors.Is/As.
base := errors.New("root")
err := fmt.Errorf("load: %w", base)
errors.Is(err, base) // trueVerifica sentinela em uma cadeia.
var ErrNotFound = errors.New("not found")
err := fmt.Errorf("user: %w", ErrNotFound)
errors.Is(err, ErrNotFound) // trueExtrai um erro tipado de uma cadeia.
type MyErr struct{ Code int }
func (e *MyErr) Error() string { return "my" }
err := fmt.Errorf("x: %w", &MyErr{Code: 7})
var me *MyErr
errors.As(err, &me) // true
// me.Code == 7Recupera apenas em defer; converte para erro nos limites.
func safe() (err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("panic: %v", r)
}
}()
panic("x")
}
// safe() retorna um erroUne com errors.Join (Go 1.20+).
err := errors.Join(errors.New("a"), errors.New("b"))
err != nil // trueStruct implementando Error().
type E struct{ Msg string }
func (e E) Error() string { return e.Msg }
E{Msg: "nope"}.Error() // "nope"Idiomático if err != nil { return }.
// v, err := f()
// if err != nil { return err }
// use vDesencapsula manualmente se necessário.
base := errors.New("b")
err := fmt.Errorf("a: %w", base)
errors.Unwrap(err) == base // true_ = apenas quando descartado intencionalmente.
_ = os.Remove("tmp") // limpeza de melhor esforço%v stringifica; %w encapsula.
e := errors.New("x")
fmt.Errorf("%v", e).Error() // "x" (não encapsula)Sentinelas da biblioteca padrão.
errors.Is(fs.ErrNotExist, fs.ErrNotExist) // trueVerifica erros de contexto.
errors.Is(context.Canceled, context.Canceled) // trueEntra em pânico em caso de erro em init/tests - não no caminho da requisição.
// func must[T any](v T, err error) T { if err != nil { panic(err) }; return v }Mantenha as mensagens de Error() estáveis para logs, não para ramificação - use Is/As.
// ramifica em errors.Is, não em strings.Contains(err.Error())errorVersões da Stack: Go 1.26.x · chi/gin/echo mais recente (verificar na compilação)
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026