go / beginner
Snippet
Error Handling: The Go Way
Go handles errors explicitly by returning error values from functions. This pattern forces developers to handle errors at each call site. The error interface has a single method Error() string. errors.New creates a simple error, while fmt.Errorf with %w wraps errors to preserve the original error chain. The nil value represents no error. Always check for errors before using the returned values.
snippet.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 mainimport ("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)}}
Breakdown
1
func divide(a, b int) (int, error)
Returns int result and error - Go's error handling convention
2
if b == 0 { return 0, errors.New(...) }
Return zero value and error when invalid input occurs
3
return a / b, nil
Return result and nil error on success
4
fmt.Errorf("...%w...", err)
%w verb creates wrapped error preserving error chain for errors.Is/As