go / expert
Snippet
Multi-Fehler-Aggregation und hierarchischer Typabgleich durch Slice-Unwrapping
Seit Go 1.20 unterstützt die Standardbibliothek die Unwrap() []error Methode für zusammengesetzte Fehler. Die Implementierung dieser Methode erlaubt es errors.Is und errors.As, baumartige Fehlerstrukturen rekursiv zu durchsuchen und aggregierte Fehler präzise auszuwerten.
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
36
package mainimport ("errors""fmt""strings")type MultiError struct {Errors []error}func (m *MultiError) Error() string {var msgs []stringfor _, err := range m.Errors {msgs = append(msgs, err.Error())}return fmt.Sprintf("%d errors occurred: %s", len(m.Errors), strings.Join(msgs, "; "))}func (m *MultiError) Unwrap() []error {return m.Errors}type NetworkTimeoutError struct {Addr string}func (e *NetworkTimeoutError) Error() string {return fmt.Sprintf("timeout accessing %s", e.Addr)}func Process(err error) bool {var target *NetworkTimeoutErrorreturn errors.As(err, &target)}
Erklärung
1
func (m *MultiError) Unwrap() []error { return m.Errors }
Gibt den internen Slice von Fehlern frei, damit das errors-Paket der Standardbibliothek ihn durchsuchen kann.
2
return errors.As(err, &target)
Durchsucht die entpackte Multi-Fehler-Hierarchie nach einer Übereinstimmung mit einem konkreten Fehlertyp.