Sobes.tech
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")
}