Defer- und benannte Rückgabewerte in Go verstehen
In Go ermöglicht die Defer-Anweisung Funktionen, Code auszuführen, nachdem die umgebende Funktion zurückgegeben wurde. Dieses Verhalten kann verwendet werden, um die benannten Rückgabewerte der umgebenden Funktion zu ändern.
Betrachten Sie das folgende Beispiel:
func c() (i int) { defer func() { i++ }() return 1 }
Diese Funktion gibt 2 zurück, obwohl die Anweisung „return 1“ verwendet wird. Dies liegt daran, dass die Defer-Anweisung einen Funktionsaufruf auf einen Stapel verschiebt, der unmittelbar vor der Rückkehr der umgebenden Funktion ausgeführt wird. Daher wird die i-Anweisung nach der return 1-Anweisung ausgeführt, wodurch der Wert von i auf 2 erhöht wird.
Naked Returns verstehen
Es ist wichtig klarzustellen, dass ein „naked „return“ in Go bezieht sich auf eine Return-Anweisung ohne Argumente. In solchen Fällen werden die benannten Rückgabewerte zurückgegeben, ohne dass sie explizit zugewiesen wurden.
func a() (i int) { i = 2 return }
Diese Funktion gibt 2 zurück, da die nackte Return-Anweisung den benannten Rückgabewert i zurückgibt, der zuvor 2 zugewiesen wurde.
Kombination von Defer und Non-Naked Returns
Im Beispiel der Funktion c ändert die Defer-Anweisung die benannter Rückgabewert i, nachdem die Anweisung „return 1“ ausgeführt wurde. Dies entspricht praktisch dem folgenden Code:
func c() (i int) { i = 1 defer func() { i++ }() }
In diesem Fall gibt die Return-Anweisung immer noch 1 zurück, aber die Defer-Anweisung erhöht den Wert von i, bevor die Funktion zurückkehrt.
Das obige ist der detaillierte Inhalt vonWie interagieren „Defer'-Anweisungen und benannte Rückgabewerte in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!