Warum Normal Return Panic vs. Named Return verbirgt
Das bereitgestellte Szenario zeigt ein unerwartetes Verhalten, bei dem NormalReturns() trotz des Auftretens von a Null zurückgibt Panik, während NamedReturns() die Panik korrekt behandelt und einen Fehler ungleich Null liefert. Dieses Verhalten ergibt sich aus der Natur benannter Rückgaben in Go.
Benannte Rückgaben
Wenn Rückgabewerte benannt werden, handelt es sich effektiv um lokale Variablen, die innerhalb der Funktion geändert werden können . Die return-Anweisung ist im Wesentlichen eine Zuweisung an diese lokalen Variablen. Im Panikfall ermöglicht die Laufzeit von Go die Ausführung verzögerter Funktionen, bevor das Programm beendet wird. Diese verzögerten Funktionen können auf die benannten Rückgabevariablen zugreifen und diese ändern.
In NamedReturns() ändert die verzögerte Funktion „catch()“ die Ergebnisvariable „err“, um eine Fehlermeldung festzulegen, wenn eine Panik auftritt. Da dies geschieht, bevor die Funktion zurückkehrt, wird der geänderte Fehlerwert anstelle von Null zurückgegeben.
Normale Rückgaben
Andererseits wird in NormalReturns() der Rückgabewert zurückgegeben Der Wert wird auf Null initialisiert und bleibt dieser Wert, da die Return-Anweisung nicht vor der Panik erreicht wird. Die lokale Variable err hat, obwohl ihr Wert in der verzögerten Funktion geändert wurde, keinen Einfluss auf den Rückgabewert.
Schlüsselunterscheidung
Daher ist die Schlüsselunterscheidung zwischen benannt Rückgaben und normale Rückgaben in diesem Szenario liegen in ihrer Fähigkeit, Rückgabewerte bei Vorliegen einer Panik zu ändern. Benannte Rückgaben ermöglichen es verzögerten Funktionen, diese Werte zu aktualisieren, was mehr Flexibilität bei der Behandlung von Ausnahmen bietet. Normale Rückgaben können jedoch keine Werte ungleich Null zurückgeben, da es vor dem Auftreten einer Panik keine explizite Rückgabeanweisung gibt.
Das obige ist der detaillierte Inhalt vonWarum behandeln benannte Rückgaben Panik anders als normale Rückgaben in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!