Heim > Artikel > Backend-Entwicklung > Warum ergibt die Messung der Ausführungszeit mit „Defer in Go“ immer Null?
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!