Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ergibt die Messung der Ausführungszeit mit „Defer in Go“ immer Null?

Warum ergibt die Messung der Ausführungszeit mit „Defer in Go“ immer Null?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-17 16:37:01349Durchsuche

Why Does Measuring Execution Time with Defer in Go Always Yield Zero?

Ausführungszeit in Go messen: Das Defer-Rätsel lösen

Defer-Anweisungen warten auf den Abschluss einer Funktion, bevor sie die zugehörigen Funktionen ausführen. Das Drucken der Ausführungszeit der folgenden Funktion mit defer ergibt jedoch immer Null:

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

    // Expected 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)
}

Problem:
defer wertet die Argumente der verzögerten Funktion aus, wenn die enthaltende Funktion sie zurückstellt . Daher wird der Start unmittelbar vor der Schleife oder dem Ruhezustand ausgewertet.

Lösung:
Um die verstrichene Zeit genau zu messen, werten Sie time.Now() innerhalb der verzögerten Funktion aus:

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

Auf diese Weise wird die Zeitdifferenz berechnet, wenn die verzögerte Funktion ausgeführt wird, wodurch genaue Ergebnisse gewährleistet werden.

Tipp: Erwägen Sie die Verwendung einer wiederverwendbaren Funktion, um die Timing-Logik für zu kapseln einfachere und konsistentere Messung.

Das obige ist der detaillierte Inhalt vonWarum ergibt die Messung der Ausführungszeit mit „Defer in Go“ immer Null?. 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