0 Tage Serie
go / intermediate
Snippet

Sicherer Umgang mit unerwarteten Laufzeit-Panics

In Go können Panics den Programmablauf unterbrechen. Die Verwendung von `recover` in einer verzögerten (deferred) Funktion ermöglicht es der Anwendung, die Panic abzufangen, in einen Standardfehler umzuwandeln und den Absturz der Anwendung zu verhindern.

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
23
24
25
package main
import (
"fmt"
"log"
)
func safeDivide(a, b int) (result int, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("recovered from panic: %v", r)
}
}()
result = a / b
return result, nil
}
func main() {
res, err := safeDivide(10, 0)
if err != nil {
log.Printf("Error: %v", err)
} else {
log.Printf("Result: %d", res)
}
}
Erklärung
1
defer func() {
Verzögert die Ausführung der anonymen Funktion, bis safeDivide beendet ist.
2
if r := recover(); r != nil {
Prüft, ob während der Funktionsausführung eine Panic aufgetreten ist, und fängt deren Wert ab.
3
err = fmt.Errorf("recovered from panic: %v", r)
Wandelt die Panic in einen Standardfehler um und weist ihn dem benannten Rückgabeparameter zu.
4
result = a / b
Führt die Division aus, was bei b gleich 0 eine Division-by-Zero-Laufzeit-Panic auslöst.