Manejo de Errores
Valores de error explícitos y envoltura. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Busca en todas las páginas de la documentación
Valores de error explícitos y envoltura. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Errores centinela o de mensaje simples.
err := errors.New("boom")
err.Error() // "boom"Envolver con %w para errors.Is/As.
base := errors.New("root")
err := fmt.Errorf("load: %w", base)
errors.Is(err, base) // trueComprobar un centinela en una cadena.
var ErrNotFound = errors.New("not found")
err := fmt.Errorf("user: %w", ErrNotFound)
errors.Is(err, ErrNotFound) // trueExtraer un error tipado de una cadena.
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 == 7Recuperarse solo en defer; convertir a error en los límites.
func safe() (err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("panic: %v", r)
}
}()
panic("x")
}
// safe() devuelve un errorUnir con errors.Join (Go 1.20+).
err := errors.Join(errors.New("a"), errors.New("b"))
err != nil // trueEstructura que implementa 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 }
// usar vDesenvuelve manualmente si es necesario.
base := errors.New("b")
err := fmt.Errorf("a: %w", base)
errors.Unwrap(err) == base // true_ = solo cuando se descarta intencionalmente.
_ = os.Remove("tmp") // limpieza de mejor esfuerzo%v convierte a cadena; %w envuelve.
e := errors.New("x")
fmt.Errorf("%v", e).Error() // "x" (no envuelve)Centinelas de la biblioteca estándar.
errors.Is(fs.ErrNotExist, fs.ErrNotExist) // trueComprobar errores de contexto.
errors.Is(context.Canceled, context.Canceled) // trueEntra en pánico ante un error en init/pruebas, no en la ruta de la solicitud.
// func must[T any](v T, err error) T { if err != nil { panic(err) }; return v }Mantener los mensajes de Error() estables para logs, no para ramificación; usar Is/As.
// ramificar en errors.Is, no en strings.Contains(err.Error())(T, error)errorVersiones de Stack: Go 1.26.x · chi/gin/echo latest (verificar en la compilación)
Revisado por Chris St. John·Última actualización: 18 jul 2026