Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-11-17 16:37:01
Original
409 Leute haben es durchsucht

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)
}
Nach dem Login kopieren

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)) }()
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage