Heim > Artikel > Backend-Entwicklung > Warum gibt „recover()' in verschachtelten verzögerten Funktionen in Go „nil' zurück?
Verhalten von Recover() in verschachtelten verzögerten Funktionen
In Go werden panic() und restart() zur Behandlung von Laufzeitfehlern verwendet . Behebbare Fehler müssen jedoch durch verzögerte Funktionen behandelt werden.
Einfacher Fall:
In einem einfachen Szenario mit verzögerten Funktionen funktioniert „recover()“ wie erwartet:
package main import "fmt" func printRecover() { r := recover() fmt.Println("Recovered:", r) } func main() { defer printRecover() panic("OMG!") }
Verschachtelter verzögerter Fall:
Wenn printRecover() in a eingeschlossen ist verschachtelte verzögerte Funktion:
func main() { defer func() { printRecover() }() panic("OMG!") }
das Verhalten ändert sich. „recover()“ in „printRecover()“ gibt Null zurück. Dies liegt daran, dass:
Gemäß der Go-Spezifikation:
Der Rückgabewert von „recover()“ ist Null, wenn „recover()“ nicht direkt von einer verzögerten Funktion aufgerufen wurde.
Im verschachtelten Fall wird printRecover() von der verschachtelten verzögerten Funktion aufgerufen, nicht direkt von der Initiale eins.
Schlussfolgerung:
Damit „recover()“ in verschachtelten verzögerten Funktionen funktioniert, muss es direkt von der verzögerten Funktion aufgerufen werden, die die Panik verarbeitet. Wenn diese Bedingung nicht erfüllt ist, gibt Recovery() Null zurück.
Das obige ist der detaillierte Inhalt vonWarum gibt „recover()' in verschachtelten verzögerten Funktionen in Go „nil' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!