Há uma função `unpredictableFunc()`, que precisa de ser envolvida para que seja executada com um limite de tempo (por exemplo, 1 segundo) e registar o tempo de execução.
// Existe uma função que funciona indefinidamente e devolve um número.
// O seu corpo não pode ser alterado (suponha que dentro há uma requisição de rede).
func unpredictableFunc() int64 {
rnd := rand.Int63n(5000)
time.Sleep(time.Duration(rnd) * time.Millisecond)
return rnd
}
// É necessário modificar a função de envolvimento, que irá trabalhar com um limite de tempo definido (por exemplo, 1 segundo).
// Se a "função longa" terminar dentro desse tempo, ótimo, devolvemos o resultado.
// Caso contrário, devolvemos um erro. O resultado da execução nesse caso não nos importa.
//
// Além disso, é necessário medir quanto tempo essa função esteve em execução (basta imprimir no log).
// A assinatura da função de envolvimento pode ser alterada.
func predictableFunc() int64 {
return unpredictableFunc()
}