Sobes.tech
Senior

O serviço em produção não fica estável por mais de 5 minutos. Conseguiu-se localizar o problema: há uma função P() numa biblioteca de terceiros que, com alguma probabilidade, causa um pânico. Como resolver esse problema? A biblioteca é de código aberto, o código pode ser visto em vendor.

sobes.tech IA

Resposta da IA

Se a função P() de uma biblioteca externa provoca uma pânico com alguma probabilidade, e o código da biblioteca está aberto, pode-se tomar os seguintes passos:

  1. Envolver a chamada à função P() numa construção recover para capturar a pânico e evitar que todo o serviço caia.

  2. Estudar o código da função P() no vendor para entender as causas da pânico — talvez seja um erro na lógica ou uso incorreto.

  3. Se possível, corrigir o erro na biblioteca e recompilá-la.

  4. Se a correção não for possível ou exigir tempo, pode-se escrever um wrapper em torno de P(), que chame a função de forma segura e trate os erros.

Exemplo de wrapper com recover em Go:

func safeP() (err error) {
    defer func() {
        if r := recover(); r != nil {
            err = fmt.Errorf("pânico capturado: %v", r)
        }
    }()
    P() // chamada à função problemática
    return nil
}

Dessa forma, o serviço não irá falhar por causa do pânico, e será possível registrar e analisar os erros.