capypad
0 Tage Serie
go / intermediate
Snippet

Ressourcensicherheit mit Defer und Panic-Recovery

Die integrierte 'recover'-Funktion ermöglicht es einem Programm, die Kontrolle über eine abstürzende Goroutine zurückzugewinnen. Sie muss immer innerhalb einer 'defer'-Funktion aufgerufen werden, um die Panic abzufangen.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
func protectedFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
 
panic("something went wrong")
fmt.Println("This will never run")
}
Erklärung
1
defer func() { ... }()
Definiert eine Funktion, die unmittelbar vor dem Ende der Funktion ausgeführt wird.
2
r := recover()
Prüft, ob gerade eine Panic vorliegt, und ruft deren Wert ab.
3
panic(...)
Löst einen Laufzeitfehler aus, der den normalen Ausführungsfluss stoppt.