Wiederherstellen
Obwohl es keinen Try-Catch-Mechanismus gibt, verfügt Go tatsächlich über einen ähnlichen Wiederherstellungsmechanismus. Die Funktion ist etwas schwächer und die Verwendung ist sehr einfach: (Empfohlenes Lernen: GO )
package main import "fmt" func main() { fmt.Printf("%d\n", cal(1, 2)) fmt.Printf("%d\n", cal(5, 2)) fmt.Printf("%d\n", cal(5, 0)) fmt.Printf("%d\n", cal(9, 2)) } func cal(a, b int) int { defer func() { if err := recover(); err != nil { fmt.Printf("%s\n", err) } }() return a / b }
Zunächst muss jeder die Rolle des Defer verstehen ähnelt dem Destruktor im objektorientierten Objekt. In dieser Funktion wird es ausgeführt, wenn es beendet wird, auch wenn es durch Panik beendet wird.
Jedes Mal, wenn die Cal-Funktion beendet wird, prüft sie, ob eine Ausnahme vorliegt. Wenn sie auftritt, können wir sie behandeln, z. B. Protokolle aufzeichnen, damit das Programm weiter ausgeführt werden kann.
package main import ( "errors" "fmt" "math" ) func main() { _, err := IntFromInt64(math.MaxInt32 + 1) if err != nil { fmt.Println(err) } } func ConvertInt64ToInt(i64 int64) int { if math.MinInt32 <= i64 && i64 <= math.MaxInt32 { return int(i64) } panic("can't convert int64 to int") } func IntFromInt64(i64 int64) (i int, err error) {//这里 defer func() { if err2 := recover(); err2 != nil { i = 0//这里 err = errors.New("ttt")//这里 } }() i = ConvertInt64ToInt(i64) return i, nil }
Hauptidee: Verwenden Sie defer, um den Wert der Rückgabevariablen (im Voraus als i und err bestimmt) vor der Rückgabe zu ändern
Das obige ist der detaillierte Inhalt vonSo kehren Sie nach der Genesung von Golang zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!