Има функция `unpredictableFunc()`, която трябва да бъде обвита така, че да се изпълнява с таймаут (например 1 секунда) и да се логира времето на изпълнение.
// Има функция, която работи неопределено дълго и връща число.
// Тялото ѝ не може да бъде променяно (представете си, че вътре има мрежов заявка).
func unpredictableFunc() int64 {
rnd := rand.Int63n(5000)
time.Sleep(time.Duration(rnd) * time.Millisecond)
return rnd
}
// Трябва да се промени функцията за обвиване, която ще работи с зададен таймаут (например 1 секунда).
// Ако "дългата" функция приключи за това време, отлично, връщаме резултата.
// Ако не, връщаме грешка. Резултатът от работата в този случай не е важен.
//
// Освен това трябва да измерим колко време е работила тази функция (просто да го изведем в лог).
// Подписът на функцията за обвиване може да бъде променен.
func predictableFunc() int64 {
return unpredictableFunc()
}