0 Tage Serie
go / intermediate
Snippet

Definieren benutzerdefinierter Fehlertypen mit der Unwrap-Methode für verschachtelte Fehler

In Go können benutzerdefinierte Fehler zugrunde liegende Fehler einpacken. Durch Implementierung der Methode `Unwrap() error` in einer benutzerdefinierten Struktur integrieren Sie diese in das standardmäßige `errors`-Paket. Dadurch können Funktionen wie `errors.Unwrap` oder `errors.Is` die Fehlerkette durchlaufen.

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
26
27
28
29
30
31
32
33
34
package main
import (
"errors"
"fmt"
)
type QueryError struct {
Query string
Err error
}
func (e *QueryError) Error() string {
return fmt.Sprintf("query %q failed: %v", e.Query, e.Err)
}
func (e *QueryError) Unwrap() error {
return e.Err
}
func runQuery() error {
baseErr := errors.New("connection timeout")
return &QueryError{Query: "SELECT * FROM users", Err: baseErr}
}
func main() {
err := runQuery()
if err != nil {
fmt.Println("Error:", err)
if unwrapped := errors.Unwrap(err); unwrapped != nil {
fmt.Println("Unwrapped:", unwrapped)
}
}
}
Erklärung
1
type QueryError struct {
Deklariert eine eigene Fehlerstruktur, die Kontextdaten der Abfrage und den zugrunde liegenden Fehler enthält.
2
func (e *QueryError) Error() string {
Implementiert das error-Interface und gibt eine formatierte Fehlerbeschreibung zurück.
3
func (e *QueryError) Unwrap() error {
Implementiert die Unwrap-Methode, die es der Standardbibliothek ermöglicht, den inneren Fehler zu inspizieren.