Heim  >  Artikel  >  Backend-Entwicklung  >  Warum liefert die Messung der Ausführungszeit verzögerter Funktionen in Go unerwartete Ergebnisse?

Warum liefert die Messung der Ausführungszeit verzögerter Funktionen in Go unerwartete Ergebnisse?

Barbara Streisand
Barbara StreisandOriginal
2024-11-20 11:47:51815Durchsuche

Why Does Measuring Deferred Function Execution Time in Go Return Unexpected Results?

Funktionsausführungszeit mit verzögerten Funktionen in Go messen

In Go bieten verzögerte Funktionen einen praktischen Mechanismus, um die Ausführung einer Funktion bis zu verzögern Die umgebende Funktion kehrt zurück. Das Drucken der für die Ausführung einer verzögerten Funktion benötigten Zeit führt jedoch manchmal zu unerwarteten Ergebnissen.

Problem:

Betrachten Sie die folgende sum()-Funktion, die versucht, die Ausführungszeit zu berechnen Verwenden einer verzögerten Funktion:

func sum() {
    start := time.Now()

    //Expecting to print non-zero value but always gets 0
    defer fmt.Println(time.Now().Sub(start))

    sum := 0
    for i := 1; i < 101; i++ {
        sum += i
    }
    time.Sleep(1 * time.Second)
    fmt.Println(sum)
}

Das Ausführen dieses Codes führt zur Ausgabe von 0 für die Ausführungszeit.

Lösung:

Das Problem tritt auf, weil Die Argumente der verzögerten Funktion werden ausgewertet, wenn die Funktion zurückgestellt wird, nicht wenn sie ausgeführt wird. Um dies zu beheben, verwenden Sie eine anonyme Funktion, um den aktuellen Wert von „start“ zu erfassen und die Ausführung dieser anonymen Funktion zu verzögern:

defer func() { fmt.Println(time.Now().Sub(start)) }()

Durch die Verwendung einer anonymen Funktion wird der Wert von „start“ zum Zeitpunkt der Verzögerung ausgewertet Funktion wird ausgeführt.

Weitere Überlegungen:

Wenn Sie mehr Anpassung oder Flexibilität benötigen, sollten Sie die Kapselung der Timing-Logik in einer wiederverwendbaren Funktion in Betracht ziehen. Dieser Ansatz bietet eine modularere und wiederverwendbarere Lösung.

Das obige ist der detaillierte Inhalt vonWarum liefert die Messung der Ausführungszeit verzögerter Funktionen in Go unerwartete Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn