"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 manejar los pánicos en las rutinas Go: comprender el alcance de la recuperación?

¿Cómo manejar los pánicos en las rutinas Go: comprender el alcance de la recuperación?

Publicado el 2024-11-10
Navegar:661

How to Handle Panics in Go Routines: Understanding Recover Scope?

Manejo de pánicos en rutinas de Go

Go proporciona las funciones integradas pánico() y recovery() para administrar errores inesperados y condiciones fatales en código en ejecución. Para manejar los pánicos en una rutina de ejecución, es esencial comprender el alcance de recovery().

Comprender el alcance de recovery()

recover() solo puede recuperarse de pánicos dentro de la misma rutina que generó el pánico. Si se produce un pánico en una rutina sin recuperación activa(), todo el programa fallará.

Ejemplo con manejo de errores incorrecto

El ejemplo de código proporcionado en la pregunta no puede manejar un pánico porque recovery() está definido en la rutina principal, mientras que el pánico se genera en la rutina handle(). Como resultado, recovery() no puede acceder al valor de pánico.

func main() {
    // ...

    go handle(done)
    // ...
}

func handle(done chan int64) {
    // ...
    fmt.Println(*a) // Panic here
    done 

Ejemplo con manejo correcto de errores

Para manejar los pánicos generados en una gorutina, coloque recovery() dentro de la propia gorutina.

func main() {
    // ...

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered")
        }
    }()

    go handle(done)
    // ...
}

func handle(done chan int64) {
    // ...
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered")
        }
    }()

    fmt.Println(*a) // Panic here
    done 

Explicación

En este ejemplo corregido, recovery() ahora está dentro de la rutina handle(), por lo que puede capturar el pánico que surge al eliminar la referencia al puntero nulo. Luego se recupera el pánico y se imprime el mensaje "Recuperado".

Comprender el alcance de recovery() es crucial para un manejo efectivo de errores en las rutinas Go. Coloque siempre recovery() dentro de la misma rutina donde podría ocurrir el pánico para manejar e informar con gracia cualquier condición inesperada.

Ú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