"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo devolver un error si una función Go entra en pánico?

¿Cómo devolver un error si una función Go entra en pánico?

Publicado el 2024-11-18
Navegar:535

How to Return an Error if a Go Function Panics?

Volviendo de Aplazar en Go

Te encuentras con un problema en el que deseas devolver un error si una función falla en Go. Aquí hay un análisis y una solución para su código:

func getReport(filename string) (rep report, err error) {
    rep.data = make(map[string]float64)

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
            switch x := r.(type) {
            case string:
                err = errors.New(x)
            case error:
                err = x
            default:
                err = errors.New("Unknown panic")
            }
            rep = nil // Invalidate rep
        }
    }()
    panic("Report format not recognized.")
    // rest of the getReport function...
}

Concepto de pánico y aplazamiento

  • Pánico: Un pánico indica un error de tiempo de ejecución que puede detectarse mediante una recuperación en un función de aplazar.
  • Aplazar: Una declaración de aplazar retrasa la ejecución de una función hasta que la función circundante sale.

Modificaciones en el código:

  • La función de aplazar ahora usa declaraciones de cambio de caso para manejar el valor recuperado correctamente.
  • Si el valor recuperado es una cadena, se convierte en un error usando errores.New().
  • La variable rep se invalida después de un error para garantizar que no regrese cualquier dato.
  • La variable rep se devuelve como nula en caso de un error, que coincide con la firma de su función original.

Con estos cambios, su función getReport devolverá un error si entra en pánico debido a un formato de informe no válido. El mensaje de error será el valor de pánico (si es una cadena) o un error genérico que indica un pánico desconocido.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3