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 mainimport ("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 / breturn 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.