Heim  >  Artikel  >  Backend-Entwicklung  >  Muster und Antimuster der Fehlerbehandlung von Golang-Funktionen

Muster und Antimuster der Fehlerbehandlung von Golang-Funktionen

王林
王林Original
2024-04-24 13:30:01812Durchsuche

Zu den Fehlerbehandlungsmodi der Go-Funktion gehören: Verwenden von „errors.New()“ zum Erstellen von Fehlern, Umschließen zugrunde liegender Fehler und Zurückgeben von „nil“, um anzuzeigen, dass keine Fehler vorliegen. Zu den Anti-Mustern gehören die Verwendung magischer Zahlen oder Zeichenfolgen zur Darstellung von Fehlern, die implizite Behandlung von Fehlern, das Ignorieren von Fehlern und verzögerte Beendigungsmuster. Best Practice: Verwenden Sie „errors.New()“, um Fehler zu erstellen und zurückzugeben. Anti-Pattern-Beispiel: Von os.Open() zurückgegebene Fehler ignorieren. Das Befolgen von Best Practices und das Vermeiden von Anti-Patterns führt zu klarem, wartbarem und leicht zu debuggendem Code.

Muster und Antimuster der Fehlerbehandlung von Golang-Funktionen

Muster und Anti-Patterns der Go-Funktionsfehlerbehandlung

Wenn es um die Behandlung von Fehlern in Go geht, gibt es viele Möglichkeiten, dies zu tun. Allerdings sind nicht alle Modelle ideal. In diesem Artikel werden Best Practices und Anti-Patterns für die Funktionsfehlerbehandlung in Go untersucht und Beispiele aus der Praxis zur Veranschaulichung bereitgestellt.

Best Practice:

  • Verwenden Sie errors.New(), um Fehler zu erstellen: Dies ist die häufigste Methode zum Erstellen eines neuen Fehlers, der einen Fehler-Wert.
  • errors.New() 创建错误:这是一个创建新错误的最常见方法,它可以返回带有简洁描述的 error 值。
  • 用底层错误包装错误:如果一个函数接到一个错误,可以将其包装在一个新的错误中,以提供关于错误来源的更多上下文。
  • 返回 nil 表示没有错误:如果函数未遇到错误,则应返回 nil
  • 不要使用全局错误变量:使用全局错误变量会产生竞争条件,并使代码难以调试。
  • 处理错误:所有错误都应在函数中处理,而不是将其忽略。理想情况下,应返回错误指示函数失败。

反模式:

  • 使用魔数或固定的字符串表示错误:这会使代码难以维护和扩展。
  • 隐式处理错误:不要使用 if err != nil { ... } 来检查错误,然后直接返回,因为这会使错误处理难以跟踪。
  • 忽略错误:始终处理错误,即使你认为它们不太可能发生。
  • 使用延迟退出模式:在函数末尾使用 if err != nil { return err } 的模式会使代码难以阅读和维护。

真实案例:

最佳实践:以下函数使用 errors.New() 创建一个新的错误,并返回它以向调用者指示文件打开失败:

func OpenFile(path string) (*os.File, error) {
    f, err := os.Open(path)
    if err != nil {
        return nil, errors.New("failed to open file: " + err.Error())
    }
    return f, nil
}

反模式:以下函数没有处理 os.Open()

Fehler mit zugrunde liegenden Fehlern umschließen:

Wenn eine Funktion einen Fehler empfängt, kann sie in einen neuen Fehler eingeschlossen werden, um mehr Kontext über die Fehlerquelle bereitzustellen.

🎜Gib nil zurück, um anzuzeigen, dass kein Fehler vorliegt: 🎜Wenn die Funktion keinen Fehler festgestellt hat, sollte sie nil zurückgeben. 🎜🎜Verwenden Sie keine globalen Fehlervariablen: 🎜Die Verwendung globaler Fehlervariablen kann zu Race-Bedingungen führen und das Debuggen von Code erschweren. 🎜🎜Fehlerbehandlung: 🎜Alle Fehler sollten innerhalb der Funktion behandelt und nicht ignoriert werden. Im Idealfall sollte ein Fehler zurückgegeben werden, der darauf hinweist, dass die Funktion fehlgeschlagen ist. 🎜🎜Anti-Muster: 🎜🎜🎜🎜🎜Verwendung magischer Zahlen oder fester Zeichenfolgen zur Darstellung von Fehlern: 🎜Dies kann die Wartung und Erweiterung des Codes erschweren. 🎜🎜Implizite Behandlung von Fehlern: 🎜Verwenden Sie if err != nil { ... nicht, um nach Fehlern zu suchen und dann direkt zurückzukehren, da dies die Fehlerbehandlung erschwert Schiene. 🎜🎜Fehler ignorieren: 🎜Behandeln Sie Fehler immer, auch wenn Sie denken, dass sie unwahrscheinlich sind. 🎜🎜Verzögertes Exit-Muster verwenden: 🎜Die Verwendung des Musters if err != nil { return err am Ende einer Funktion kann das Lesen und Warten des Codes erschweren. 🎜🎜Echter Fall: 🎜🎜🎜🎜Best Practice: 🎜Die folgende Funktion verwendet errors.New(), um einen neuen Fehler zu erstellen und ihn an den Aufrufer zurückzugeben. Zeigt dies an Das Öffnen der Datei ist fehlgeschlagen: 🎜
func OpenFile(path string) *os.File {
    f, _ := os.Open(path)
    return f
}
🎜🎜 Anti-Pattern: 🎜Die folgende Funktion behandelt den von os.Open() zurückgegebenen Fehler nicht, der zum Absturz des Programms führen kann: 🎜rrreee🎜 Best Practices Wie in diesem Artikel beschrieben, können Sie durch Übung und Vermeidung von Anti-Patterns Code schreiben, der klar, wartbar und leicht zu debuggen ist. 🎜

Das obige ist der detaillierte Inhalt vonMuster und Antimuster der Fehlerbehandlung von Golang-Funktionen. 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