Standard-Fehlerbehandler in Go
Go verfügt über mehrere idiomatische Ansätze zur Fehlerbehandlung:
1. Fehlervariablen behoben
var (
ErrSomethingBad = errors.New("some string")
ErrKindFoo = errors.New("foo happened")
)
2. Fehlertypen
type SomeError struct {
ExtraInfo int
}
func (e SomeError) Error() string { /* … */ }
3. Ad-hoc-Fehler
func SomepackageFunction() error {
return errors.New("not implemented")
}
4. Standardbibliotheksfehler
func SomeFunc() error {
return io.EOF
}
5. Fehlerschnittstellen
type Error interface {
error
Timeout() bool
Temporary() bool
}
6. Wrapping-Fehler (Go 1.13)
func SomepackageFunction() error {
err := somethingThatCanFail()
if err != nil {
return fmt.Errorf("some context: %w", err)
}
}
Den richtigen Ansatz wählen
Die bevorzugten Methoden sind:
- Fehler behoben Variablen oder Fehlertypen für Fehler, die Benutzer möglicherweise speziell testen möchten.
- Ad-hoc-Fehler oder Standardbibliotheksfehler für kleinere Fehler, die wahrscheinlich nicht getestet werden.
- Fehlerschnittstellen für Fehler mit bestimmtem Verhalten oder Eigenschaften.
- Umschlossene Fehler zum Hinzufügen von Kontext zu vorhandenen Fehlern (Go 1.13 ).
Vorteile:
-
Feste Fehlervariablen:Einfach zu testen und zu vergleichen.
- Fehlertypen: Erweiterbar mit zusätzlichen Informationen für Fehler Handhabung.
-
Ad-hoc-Fehler: Prägnant für kleinere Fehler.
-
Fehlerschnittstellen: Erzwingen Sie spezifisches Fehlerverhalten und erleichtern Sie Polymorphismus.
-
Umschlossene Fehler: Stellen Sie Kontext bereit, ohne einen benutzerdefinierten Fehler zu erstellen Typen.
Weiterführende Literatur:
- [Fehler effektiv beheben](https://go.dev/doc/articles/errors)
- [The Go Blog: Fehlerbehandlung und Go](https://blog.golang.org/error-handling-and-go)
- [Dave Cheney: Inspecting Errors](https://dave.cheney.net/2016/04/07 /inspecting-errors)
- [Peter Bourgon: Programmieren mit Fehler](https://go.dev/blog/errors)
Das obige ist der detaillierte Inhalt vonWas sind die Best Practices für den Umgang mit Fehlern in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn