0 Tage Serie
go / intermediate
Snippet

Überprüfung spezifischer Fehlerketten mit Errors Is

Ein normaler Gleichheitsvergleich (`==`) schlägt fehl, wenn Fehler verschachtelt (wrapped) sind. In Go durchläuft `errors.Is` die Fehlerkette, um zu prüfen, ob ein verschachtelter Fehler mit einem bestimmten Zielfehler übereinstimmt.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import (
"errors"
"fmt"
)
var ErrNotFound = errors.New("resource not found")
func fetchResource() error {
return fmt.Errorf("database query failed: %w", ErrNotFound)
}
func main() {
err := fetchResource()
if errors.Is(err, ErrNotFound) {
fmt.Println("Handled: The resource indeed could not be found.")
} else {
fmt.Println("Error:", err)
}
}
Erklärung
1
var ErrNotFound = errors.New("resource not found")
Deklariert eine Sentinel-Fehlervariable auf Paketebene, die das Fehlen einer Ressource anzeigt.
2
return fmt.Errorf("database query failed: %w", ErrNotFound)
Verschachtelt (wrappt) den Sentinel-Fehler mithilfe des %w-Formatierungsausdrucks in fmt.Errorf, um die Fehlerkette zu erhalten.
3
if errors.Is(err, ErrNotFound) {
Überprüft rekursiv die verschachtelte Fehlerkette, um festzustellen, ob ErrNotFound vorhanden ist.