Middle+
O que é um pânico em Go e quando não pode ser capturado?
sobes.tech IA
Resposta da IA
Em Go, o pânico (panic) é um mecanismo utilizado para lidar com erros críticos durante a execução do programa. Quando uma função panic é chamada, a execução da goroutine atual é interrompida e inicia o processo de "desenrolar" da pilha (stack unwinding), no qual as funções deferidas (defer) são chamadas.
O pânico pode ser capturado com a função recover, que deve ser chamada dentro de uma função deferida. Se recover for chamado fora de uma função deferida, não poderá capturar o pânico.
No entanto, há situações em que o pânico não pode ser capturado:
- Se o pânico ocorrer na goroutine principal e não for capturado, o programa terminará abruptamente.
- Se o pânico ocorrer em chamadas de sistema ou no runtime, que não permitem recover.
- Se recover for chamado fora do contexto de uma função deferida, não poderá impedir que o programa termine.
Exemplo:
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Pânico capturado:", r)
}
}()
panic("algo deu errado")
}
Neste exemplo, o pânico será capturado e tratado, e o programa não terminará abruptamente.