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:
-
Envolver a chamada à função P() numa construção
recoverpara capturar a pânico e evitar que todo o serviço caia. -
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.
-
Se possível, corrigir o erro na biblioteca e recompilá-la.
-
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.