In Golang gibt es mehrere idiomatische Ansätze für den Umgang mit Fehlern.
Autoren deklarieren häufig feste Fehlervariablen gemäß der Namenskonvention Err... For Beispiel:
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
Das Deklarieren von Fehlertypen (...Fehler) mit spezifischen Informationen, die für Anrufer nützlich sind, ist eine weitere gängige Praxis.
type SomeError struct { // extra information, whatever might be useful to callers // (or for making a nice message in `Error()`) ExtraInfo int } type OtherError string func (e SomeError) Error() string { /* … */ } func (e OtherError) Error() string { return fmt.Sprintf("failure doing something with %q", string(e)) }
Ad-hoc-Fehler
Wenn Sie nicht erwarten, dass Benutzer Tests auf bestimmte Fehler durchführen müssen, können Sie eine Anzeige erstellen Hoc-Fehler mithilfe von „errors.New“.
func SomepackageFunction() error { return errors.New("not implemented") }
Verwendung von Standardpaketfehlern
Sie können Fehler verwenden, die in Standardpaketen wie io.EOF definiert sind. Im Allgemeinen ist es jedoch besser, benutzerdefinierte Fehler für Ihr eigenes Paket zu erstellen.
func SomeFunc() error { return io.EOF }
Fehlerschnittstellen
Durch das Erstellen einer Fehlerschnittstelle können Sie bestimmte Verhaltensweisen oder Typen überprüfen.
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
Kontextbezogen Fehler
Verwenden Sie diese Technik mit Go 1.13 oder höher, um zusätzlichen Kontext zu einem vorhandenen Fehler bereitzustellen.
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
Die Wahl des Ansatzes hängt davon ab, ob Sie davon ausgehen, dass Benutzer Tests durchführen müssen spezifische Fehler und die Möglichkeit für mehrere Benutzer, ihre eigene Fehlerbehandlung zu implementieren.
Das obige ist der detaillierte Inhalt vonWie gehe ich am besten mit Fehlern in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!