Sobes.tech
Senior

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() }