Junior — Middle
Quais são as diferenças entre pânico e erro crítico que interrompem a execução do programa?
sobes.tech IA
Resposta da IA
Em Go, o pânico (panic) é um mecanismo que ocorre durante a execução do programa em caso de erro crítico, por exemplo, acesso fora dos limites de um slice ou chamada explícita a panic(). O pânico leva à interrupção imediata da execução normal da goroutine atual e inicia o processo de "desenrolar" da pilha (stack unwinding), chamando funções defer. Se o pânico não for tratado com recover(), o programa terminará com um erro.
Um erro crítico que para a execução do programa pode ser causado por um pânico, mas também pode estar relacionado a erros fatais a nível do sistema (por exemplo, erro de segmentação), que não podem ser tratados no código.
Principais diferenças:
- Pânico — mecanismo controlado que pode ser capturado e tratado com
recover(). - Erro crítico — pode ser não tratável, levando à terminação imediata do programa sem possibilidade de recuperação.
Exemplo de uso de pânico e recuperação:
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recuperado após pânico:", r)
}
}()
panic("algo deu errado")
}
func main() {
mayPanic()
fmt.Println("O programa continua")
}