C'è una funzione `unpredictableFunc()`, che deve essere avvolta in modo che venga eseguita con un timeout (ad esempio, 1 secondo) e venga registrato il tempo di esecuzione.
// C'è una funzione che funziona indefinitamente e restituisce un numero.
// Il suo corpo non può essere modificato (supponiamo che all'interno ci sia una richiesta di rete).
func unpredictableFunc() int64 {
rnd := rand.Int63n(5000)
time.Sleep(time.Duration(rnd) * time.Millisecond)
return rnd
}
// È necessario modificare la funzione di wrapping, che funzionerà con un timeout impostato (ad esempio, 1 secondo).
// Se la "funzione lunga" termina in questo tempo, ottimo, restituiamo il risultato.
// Se no, restituiamo un errore. Il risultato di questa esecuzione in questo caso non ci interessa.
//
// Inoltre, bisogna misurare quanto tempo questa funzione è stata in esecuzione (basta stamparlo nel log).
// La firma della funzione di wrapping può essere modificata.
func predictableFunc() int64 {
return unpredictableFunc()
}