Heim >Backend-Entwicklung >Golang >Wie unterscheiden sich benannte und normale Rückgaben in Go, wenn eine Funktion in Panik gerät?
Warum eine normale Rückgabe eine Panik verbirgt, die eine benannte Rückgabe beim Anrufer auslöst
In Go werden sowohl normale als auch benannte Rückgabeanweisungen verwendet um Werte von einer Funktion zurückzugeben. Es gibt jedoch einen subtilen Unterschied in ihrem Verhalten, wenn eine Funktion in Panik gerät.
Bei einer normalen Rückgabe werden die Rückgabewerte beim Aufruf der Funktion auf ihre Nullwerte initialisiert. Wenn die Funktion abstürzt, bevor sie eine Return-Anweisung erreicht, bleiben die Rückgabewerte auf ihren Nullwerten. Wenn eine Funktion beispielsweise einen Fehlerwert zurückgibt, gibt eine normale Rückgabe immer Null zurück, wenn die Funktion abstürzt.
Im Gegensatz dazu ermöglichen benannte Rückgaben, dass die Rückgabewerte durch verzögerte Funktionen oder durch die Funktion selbst zuvor geändert werden Die Funktion kehrt zu ihrem Aufrufer zurück. Wenn eine Funktion mit benannten Rückgaben in Panik gerät, können verzögerte Funktionen die Rückgabewerte ändern, bevor die Funktion zu ihrem Aufrufer zurückkehrt.
Dieser Unterschied kann anhand des folgenden Beispiels veranschaulicht werden:
package main import ( "fmt" "log" ) func catch(err *error) { if r := recover(); r != nil { *err = fmt.Errorf("recovered panic: %v", r) } } func panicIf42(n int) { if n == 42 { panic("42!") } } 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 } func main() { err := NamedReturns(42) log.Printf("NamedReturns error: %v", err) err = NormalReturns(42) log.Printf("NormalReturns error: %v", err) }
Die Ausgabe dieses Programms ist:
2009/11/10 23:00:00 NamedReturns error: recovered panic: 42! 2009/11/10 23:00:00 NormalReturns error: <nil>
Wie Sie sehen können, gibt die benannte Rückgabe einen Fehler ungleich Null zurück, während die normale Rückgabe Null zurückgibt. Dies liegt daran, dass die verzögerte Catch-Funktion der NamedReturns-Funktion den Fehler-Rückgabewert ändert, bevor die Funktion zu ihrem Aufrufer zurückkehrt.
Dieses Verhalten kann nützlich sein, um Fehler im gesamten Programm konsistent zu behandeln. Durch die Verwendung benannter Rückgaben können Sie sicherstellen, dass alle Funktionen bei Panik einen Fehler ungleich Null zurückgeben, selbst wenn die Panik auftritt, bevor die Funktion eine Return-Anweisung erreicht.
Das obige ist der detaillierte Inhalt vonWie unterscheiden sich benannte und normale Rückgaben in Go, wenn eine Funktion in Panik gerät?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!