In Go liegt der Unterschied zwischen normalen und benannten Rückgaben außerhalb der Lesbarkeit. Benannte Rückgaben ermöglichen Änderungen an Rückgabewerten, die sich auf die Ergebnisse im Panikfall auswirken.
Bedenken Sie den folgenden Code:
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) }
Unerwartet gibt NormalReturns Null zurück. während NamedReturns einen Fehler zurückgibt. Wie kann dieses Verhalten erklärt werden?
In NormalReturns wird der Rückgabewert auf Null initialisiert (der Nullwert des Fehlers). Da die Panik in panicIf42() verhindert, dass die Return-Anweisung erreicht wird, bleibt die Ergebnisvariable auf Null gesetzt.
Im Gegensatz dazu deklariert NamedReturns eine benannte Rückgabevariable err. Bei einer Panik ändert die verzögerte Funktion „catch()“ diese Variable. Der benannte Ergebniswert wird beibehalten und zurückgegeben, auch wenn die Return-Anweisung nicht ausgeführt wird.
Benannte Rückgaben bieten mehr Flexibilität und Kontrolle über Rückgabewerte. Sie ermöglichen die Änderung von Rückgabewerten durch verzögerte Funktionen und stellen sicher, dass bestimmte Werte auch im Panikfall zurückgegeben werden. Durch das Verständnis dieser Nuancen können Entwickler benannte Rückgaben effektiv nutzen, um Ausnahmefälle zu behandeln und Fehlerbedingungen genau zu übermitteln.
Das obige ist der detaillierte Inhalt vonWie unterscheiden sich benannte und normale Renditen in Go beim Umgang mit Paniken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!