capypad
0 Tage Serie
go / beginner
Snippet

Fehlerbehandlung: Der Go-Weg

Go behandelt Fehler explizit durch das Zurückgeben von Error-Werten von Funktionen. Dieses Muster zwingt Entwickler, Fehler an jedem Aufrufpunkt zu behandeln. Das Error-Interface hat eine einzelne Methode Error() string. errors.New erstellt einen einfachen Fehler, während fmt.Errorf mit %w Fehler umhüllt, um die ursprüngliche Fehlerkette zu bewahren. Der nil-Wert repräsentiert keinen Fehler. Überprüfe immer auf Fehler, bevor du die zurückgegebenen Werte verwendest.

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
35
package main
 
import (
"errors"
"fmt"
)
 
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
 
func divideWithMessage(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("cannot divide %d by zero: %w", a, errors.New("invalid divisor"))
}
return a / b, nil
}
 
func main() {
result, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", result)
 
// Handling wrapped error
_, err = divideWithMessage(5, 0)
if err != nil {
fmt.Println("Wrapped error:", err)
}
}
Erklärung
1
func divide(a, b int) (int, error)
Gibt int-Ergebnis und Error zurück - Go's Konvention zur Fehlerbehandlung
2
if b == 0 { return 0, errors.New(...) }
Gibt Nullwert und Error zurück, wenn ungültige Eingabe vorliegt
3
return a / b, nil
Gibt Ergebnis und nil-Error bei Erfolg zurück
4
fmt.Errorf("...%w...", err)
%w verb erstellt umhüllten Fehler, der die Fehlerkette für errors.Is/As bewahrt