Hay una función `unpredictableFunc()`, que necesita ser envuelta para que se ejecute con un tiempo límite (por ejemplo, 1 segundo) y registre el tiempo de ejecución.
// Hay una función que funciona indefinidamente y devuelve un número.
// No se puede modificar su cuerpo (supongamos que dentro hay una solicitud de red).
func unpredictableFunc() int64 {
rnd := rand.Int63n(5000)
time.Sleep(time.Duration(rnd) * time.Millisecond)
return rnd
}
// Se debe modificar la función envolvente, que trabajará con un tiempo límite establecido (por ejemplo, 1 segundo).
// Si la "función larga" termina en ese tiempo, perfecto, devuelve el resultado.
// Si no, devuelve un error. El resultado de la ejecución en ese caso no nos importa.
//
// Además, se debe medir cuánto tiempo estuvo en ejecución esta función (simplemente imprimir en el log).
// La firma de la función envolvente puede ser modificada.
func predictableFunc() int64 {
return unpredictableFunc()
}