Sobes.tech
Senior

El servicio en producción no funciona de manera estable por más de 5 minutos. Se logró localizar el problema: hay una función P() en una biblioteca externa que, con cierta probabilidad, provoca un pánico. ¿Cómo resolver este problema? La biblioteca es de código abierto, se puede revisar en vendor.

sobes.tech AI

Respuesta de la IA

Si la función P() de una biblioteca externa provoca una pánico con cierta probabilidad, y el código de la biblioteca está abierto, se pueden tomar los siguientes pasos:

  1. Envolver la llamada a la función P() en una construcción recover para capturar la pánico y evitar que todo el servicio caiga.

  2. Estudiar el código de la función P() en el vendor para entender las causas de la pánico — quizás sea un error en la lógica o un uso incorrecto.

  3. Si es posible, corregir el error en la biblioteca y recompilarla.

  4. Si la corrección no es posible o requiere tiempo, se puede escribir un envoltorio alrededor de P(), que llame a la función de forma segura y maneje los errores.

Ejemplo de envoltorio con recover en Go:

func safeP() (err error) {
    defer func() {
        if r := recover(); r != nil {
            err = fmt.Errorf("pánico capturado: %v", r)
        }
    }()
    P() // llamada a la función problemática
    return nil
}

De esta manera, el servicio no fallará debido a un pánico, y se podrán registrar y analizar los errores.