Kann in Funktion Literalen lokale Variablen in Panik ändern. Dieses Verhalten ist jedoch nicht konsistent, wenn lokale Variablen in Funktionsliteralen verwendet werden.
Betrachten Sie den folgenden Code:
func foo () (Ergebnis int, errand, error) { Defer func () { wenn e: = recover (); e! = nil { Ergebnis = -1 Err = errors.new (e. (String)) } } ()) Bar() Ergebnis = 100 err = nil zurückkehren } func bar () { Panik ("Panik ist passiert") }
func foo() (result int, err error) {
defer func() {
if e := recover(); e != nil {
result = -1
err = errors.New(e.(string))
}
}()
bar()
result = 100
err = nil
return
}
func bar() {
panic("panic happened")
}
func foo () (int, error) { var result int var err Fehler Defer func () { wenn e: = recover (); e! = nil { Ergebnis = -1 Err = errors.new (e. (String)) } } ()) Bar() Ergebnis = 100 err = nil Rückgabeergebnis, ähm } func bar () { Panik ("Panik ist passiert") }
func foo() (int, error) {
var result int
var err error
defer func() {
if e := recover(); e != nil {
result = -1
err = errors.New(e.(string))
}
}()
bar()
result = 100
err = nil
return result, err
}
func bar() {
panic("panic happened")
}
gemäß der Go -Dokumentation. Entscheidend für die Verwendung benannter Rückgabeteile, wenn Sie versuchen, sie mithilfe einer Defer -Anweisung innerhalb eines Funktionsliterales zu ändern. Lokale Variablen in solchen Fällen können nicht zugegriffen oder geändert werden. Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3