Es gibt eine Funktion `unpredictableFunc()`, die eingewickelt werden muss, damit sie mit einem Timeout (z.B. 1 Sekunde) ausgeführt wird und die Ausführungszeit protokolliert wird.
// Es gibt eine Funktion, die unendlich lange läuft und eine Zahl zurückgibt.
// Ihr Körper darf nicht verändert werden (angenommen, es ist eine Netzwerk-Anfrage im Inneren).
func unpredictableFunc() int64 {
rnd := rand.Int63n(5000)
time.Sleep(time.Duration(rnd) * time.Millisecond)
return rnd
}
// Die Wrapper-Funktion muss geändert werden, um mit einem festgelegten Timeout (z.B. 1 Sekunde) zu arbeiten.
// Wenn die "lange" Funktion innerhalb dieser Zeit fertig ist, ist das großartig, wir geben das Ergebnis zurück.
// Wenn nicht, geben wir einen Fehler zurück. Das Ergebnis der Ausführung ist in diesem Fall nicht wichtig.
//
// Zusätzlich muss gemessen werden, wie lange diese Funktion lief (einfach im Log ausgeben).
// Die Signatur der Wrapper-Funktion kann geändert werden.
func predictableFunc() int64 {
return unpredictableFunc()
}