La función de recuperación de Golang se usa para recuperar una goroutina de un pánico. Piense en ello como un bloque de try/captación en otros lenguajes de programación. Podemos usar el método de recuperación para recuperar el programa de un error planteado por un método de pánico. Esto nos ayuda a manejar graciosamente los errores en caso de errores en lugar de terminar el programa.
Explore cómo podemos usar el método de recuperación para recuperar un programa de un pánico.
Método de recuperación de Golang
El método de recuperación es un método integrado que se define en el paquete GO integrado. La sintaxis de la función es como se muestra:
interfaz de recuperación de func ()
Para implementar la función de recuperación adecuadamente, se deben cumplir las siguientes condiciones:
- Llame siempre a la función de recuperación dentro de una función diferida. Esto se debe a que los métodos diferidos para no terminar en el caso de un pánico. Esto los hace capaces de recuperar el programa una vez que ocurre un pánico. Consulte nuestro tutorial sobre Golang Panic para obtener más información.
- El método de recuperación OS solo aplicable en una goldine que encuentra un pánico. Si se llama en una goroutina que no experimenta el pánico, la recuperación no funciona.
Ejemplo 1
El siguiente ejemplo ilustra cómo usar el método de recuperación.
paquete principal
importar "fmt"
func panic_me ()
pánico ("desperdiciado!")
func Main ()
diferir func ()
si rec: = recuperar (); recreación != nulo
fmt.Println ("Whew!, Estoy salvada")
()
Panic_me ()
fmt.Println ("No puedo ejecutar")
En el ejemplo anterior, creamos una función que entra en pánico. Dentro de la función principal, creamos una función de diferir que intenta recuperar el programa. Si la recuperación es éxito, imprime un mensaje dentro del bloque if.
Si ejecutamos el programa anterior, debemos obtener una salida como se muestra:
$ Go Run Recuperar.ir
Uf!, estoy salvada
Tenga en cuenta que el mensaje dentro del bloque principal no se ejecuta. Esto se debe a que la función principal se destruye inmediatamente después del pánico. Solo el método diferido puede ejecutarse después de un pánico.
Ejemplo 2
El siguiente ejemplo también ilustra cómo recuperar un programa de un índice fuera de límite.
paquete principal
importar (
"FMT"
"tiempo de ejecución/depuración"
)
func nopanic ()
si rec: = recuperar (); recreación != nulo
fmt.Println ("Casi morir")
depurar.PrintStack ()
FUNC getValue (slice [] int, index int)
if index> (len (slice) - 1)
Pánico ("Acceso al índice ilegal!")
fmt.Println (Slice [índice])
func Main ()
slc: = [] int 1, 2, 3
Diferir a DontPanic ()
GetValue (SLC, 5)
En el ejemplo anterior, creamos una función que maneja el pánico utilizando el método de recuperación e imprime la traza de la pila utilizando la depuración.Método printStack ().
Ahora, si intenta acceder a un elemento con un índice fuera de límite, el método de recuperación maneja el pánico.
El código anterior debe devolver un error como:
Casi me muero
Goroutine 1 [Running]:
tiempo de ejecución/depuración.Pila()
C:/archivos de programa/go/src/runtime/debug/stack.Ir: 24 +0x65
tiempo de ejecución/depuración.PrintStack ()
C:/archivos de programa/go/src/runtime/debug/stack.Ir: 16 +0x19
principal.no entrar en pánico()
recuperar.Ir: 15 +0x6a
Panic (0xa54b20, 0xa861b8)
C:/archivos de programa/go/src/runtime/pánico.Ir: 1038 +0x215
principal.getValue (0xc0000cdf50, 0xc0000cdf70, 0x9c52b9, 0x60)
recuperar.Ir: 19 +0x98
principal.principal()
recuperar.Ir: 33 +0x7e
Lo anterior representa el rastro de la pila a medida que el programa entra en pánico.
Conclusión
En este artículo, cubrimos cómo recuperar un programa de un pánico utilizando el método de recuperación. También aprendimos a obtener el rastro de la pila si un programa en pánico usando la depuración.Método de pánico ().