go / intermediate
Snippet
Verwalten von Laufzeit-Panics mit Recover
Recover ist eine integrierte Funktion, die die Kontrolle über eine abstürzende (panicking) Goroutine wiedererlangt. Sie ist nur innerhalb von verzögerten (deferred) Funktionen nützlich. Während der normalen Ausführung gibt ein Aufruf von recover nil zurück und hat keine Auswirkungen.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package mainimport ("fmt")func parseAndDivide(a, b int) (res int, err error) {defer func() {if r := recover(); r != nil {err = fmt.Errorf("runtime panic caught: %v", r)}}()if b == 0 {panic("division by zero is forbidden")}return a / b, nil}func main() {_, err := parseAndDivide(10, 0)fmt.Println("Handled panic gracefully:", err)}
Erklärung
1
defer func() {
Plant die verzögerte Ausführung einer Funktion zur Bereinigung vor Rückgabe der Funktion.
2
if r := recover(); r != nil {
Fängt jede aktive Panic in der aktuellen Goroutine ab und gibt den Panic-Wert zurück.
3
err = fmt.Errorf(...)
Übersetzt den Panic-Wert in einen Standard-Go-Fehler, der an den Aufrufer zurückgegeben wird.