In Go ermöglichen benannte Ergebnisparameter die Zuweisung spezifischer Werte, die von a zurückgegeben werden sollen Funktion. Dieses Verhalten unterscheidet sich jedoch von Funktionen, die ohne benannte Ergebnisparameter zurückgeben, was Fragen aufwerfen kann.
Betrachten Sie den folgenden Code, bei dem NormalReturns und NamedReturns Funktionen sind, die versuchen, bei einer Panik einen Fehler zurückzugeben:
func NormalReturns(n int) error { var err error defer catch(&err) panicIf42(n) return err } func NamedReturns(n int) (err error) { defer catch(&err) panicIf42(n) return }
Wenn in panicIf42 eine Panik ausgelöst wird, gibt NormalReturns Null zurück, obwohl man einen Fehler erwarten würde. Dies geschieht, weil die verzögerte Catch-Funktion den Fehler zuweist, nachdem die Panik die Kontrolle an den Aufrufer zurückgegeben hat.
Im Gegensatz dazu gibt NamedReturns den geänderten Fehlerwert zurück, da benannte Ergebnisparameter es verzögerten Funktionen ermöglichen, sie zu ändern. Wenn die Panik auftritt, weist die verzögerte Catch-Funktion den Fehler zu, der erhalten bleibt und zurückgegeben wird, wenn die Funktion endet.
Spezifikation für Rückgabeanweisungen:
"Alle Ergebnisse Werte werden beim Eintritt in die Funktion auf die Nullwerte ihres Typs initialisiert ... Eine „Return“-Anweisung, die Ergebnisse angibt, setzt die Ergebnisparameter vor allen verzögerten Funktionen ausgeführt.“
Spezifikation für Defer-Anweisungen:
„Verzögerte Funktionen können auf die Ergebnisparameter zugreifen und diese ändern, bevor sie zurückgegeben werden.“
Daher gilt: Da in NormalReturns keine benannten Ergebnisparameter vorhanden sind, wird der Rückgabewert auf Null initialisiert und bleibt nach der Panik Null. In NamedReturns ändert die verzögerte Funktion den Ergebnisparameter err und sein Wert wird als zurückgegebener Fehler verwendet.
Das obige ist der detaillierte Inhalt vonGo-Named-Retouren im Vergleich zu normalen Retouren: Warum unterscheidet sich die Panikbehandlung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!