Istnieje funkcja `unpredictableFunc()`, którą trzeba opakować tak, aby działała z limitem czasu (np. 1 sekunda) i logowała czas wykonania.
// Istnieje funkcja, która działa nieskończenie długo i zwraca liczbę.
// Nie można zmieniać jej ciała (załóżmy, że wewnątrz jest żądanie sieciowe).
func unpredictableFunc() int64 {
rnd := rand.Int63n(5000)
time.Sleep(time.Duration(rnd) * time.Millisecond)
return rnd
}
// Należy zmodyfikować funkcję opakowującą, która będzie działać z ustawionym limitem czasu (np. 1 sekunda).
// Jeśli "długa" funkcja zakończy się w tym czasie, to świetnie, zwracamy wynik.
// Jeśli nie, zwracamy błąd. Wynik działania w tym przypadku nie jest ważny.
//
// Dodatkowo, trzeba zmierzyć, jak długo ta funkcja była wykonywana (wystarczy wypisać w logu).
// Sygnaturę funkcji opakowującej można zmienić.
func predictableFunc() int64 {
return unpredictableFunc()
}