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