¿Cuáles son las diferencias entre pánico y error crítico que detiene la ejecución del programa?
sobes.tech AI
Respuesta de la IA
En Go, el pánico (panic) es un mecanismo que se activa ante un error crítico durante la ejecución del programa, por ejemplo, acceder fuera de los límites de un slice o llamar explícitamente a panic(). El pánico provoca la terminación inmediata de la ejecución normal de la goroutine actual y comienza el proceso de "desenrollado" de la pila (stack unwinding), llamando a las funciones diferidas (defer). Si el pánico no se maneja con recover(), el programa terminará con un error.
Un error crítico que detiene la ejecución del programa puede ser causado por un pánico, pero también puede estar relacionado con errores fatales a nivel del sistema (por ejemplo, un error de segmentación), que no pueden ser manejados en el código.
Diferencias principales:
- Pánico — un mecanismo controlado que puede ser capturado y manejado con
recover(). - Error crítico — puede ser no manejable, llevando a la terminación inmediata del programa sin posibilidad de recuperación.
Ejemplo de uso de pánico y recuperación:
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recuperado después del pánico:", r)
}
}()
panic("algo salió mal")
}
func main() {
mayPanic()
fmt.Println("El programa continúa ejecutándose")
}