Funktionale Änderungen in Golang mit „Defer“ verstehen
In Golang können Entwickler mit „Defer“ Funktionen einrichten, die nach Abschluss einer Funktion ausgeführt werden, wodurch Post aktiviert wird -Aufräumarbeiten durchführen. Allerdings können Probleme auftreten, wenn versucht wird, Variablenwerte, die auf unterschiedliche Weise innerhalb derselben Funktion deklariert wurden, zu ändern.
Betrachten Sie das folgende Codebeispiel:
func c(i int) int { defer func() { i++ }() return i } func c1() (i int) { defer func() { i++ }() return i } func c2() (i int) { defer func() { i++ }() return 2 }
In c(0), aufgrund von i Da es sich um einen Eingabeparameter handelt, bleibt der zurückgegebene Wert von der verzögerten Erhöhung unberührt, was zu einer Druckausgabe von 0 führt.
In c1() ist i der benannte Ergebnisparameter, wobei der Der Rückgabewert wird ihm vor der verzögerten Funktionsausführung explizit zugewiesen. Somit wirkt sich das verzögerte Inkrement auf den zurückgegebenen Wert aus und ergibt eine Ausgabe von 1.
Obwohl i in c2() jedoch explizit als 2 zurückgegeben wird, ändert das verzögerte Inkrement den Ergebnisparameter, was zu einer Rückgabe führt Wert von 3.
Die Spezifikation verdeutlicht dieses Verhalten:
Rückgabeanweisungen:
Eine „Rückgabe“-Anweisung, die angibt results legt die Ergebnisparameter fest, bevor verzögerte Funktionen ausgeführt werden.
Bei Funktionen mit benannten Ergebnisparametern sind die zurückgegebenen Werte immer die Werte dieser Variablen, aber Rückgabeanweisungen können diesen Parametern neue Werte zuweisen. Verzögerte Funktionen können diese Parameter nach der Return-Anweisung weiter ändern.
Dieses Prinzip gilt sowohl für Funktionen als auch für Methoden, bei denen verzögerte Funktionen auf benannte Ergebnisparameter zugreifen und diese ändern können, bevor sie zurückgegeben werden. Daher ist es wichtig zu berücksichtigen, wie sich Variablendeklarationen und verzögerte Funktionsänderungen auf die endgültigen zurückgegebenen Werte auswirken.
Das obige ist der detaillierte Inhalt vonWie wirken sich „Defer'-Anweisungen auf Rückgabewerte in Go basierend auf der Variablendeklaration aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!