Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit mehreren Fehlern gleichzeitig in Golang um?

Wie gehe ich mit mehreren Fehlern gleichzeitig in Golang um?

王林
王林Original
2024-06-05 22:47:00776Durchsuche

Die Möglichkeit, mehrere Fehler gleichzeitig in Go zu behandeln, besteht darin, Fehler zu verwenden. Ziel ist es, zu überprüfen, ob der Fehler der zugrunde liegende Fehler eines anderen Fehlers ist. Verwenden Sie „errors.As“, um Fehler nach Möglichkeit in einen bestimmten Typ umzuwandeln. Verwenden Sie „errors.MultiError“, um ein ErrorGroup-Objekt zu erstellen, das mehrere Fehler enthält. Durchlaufen Sie die ErrorGroup und führen Sie für jeden Fehlertyp spezifische Aktionen aus.

如何在 Golang 中同时处理多个错误?

Wie gehe ich mit mehreren Fehlern gleichzeitig in Golang um?

Die gleichzeitige Behandlung mehrerer Fehler in Golang wird durch die Verwendung der Funktionen errors.Is und errors.As erreicht. errors.Is prüft, ob ein Fehler der zugrunde liegende Fehler eines anderen Fehlers ist, während errors.As einen Fehler in einen anderen Typ umwandelt und „true“ zurückgibt, wenn die Konvertierung erfolgreich ist FALSCH. errors.Iserrors.As函数来实现的。errors.Is检查一个错误是否为另一个错误的底层错误,而errors.As将一个错误强制转换为另一个类型,如果转换成功则返回true,否则返回false。

用法:

  1. 确定是否为底层错误

    var err error
    
    // 检查 err 是否为 os.ErrNotExist 的底层错误
    if errors.Is(err, os.ErrNotExist) {
        // 处理 os.ErrNotExist 错误
    }
  2. 强制转换为特定类型

    if errors.As(err, &someError) {
        // err 可以转换为 someError 类型
    }

实战案例:

假设有一个函数需要调用多个外部函数,每个函数都可能返回一个错误。为了同时处理所有这些错误,可以在函数中使用errors.MultiError创建multiError,然后调用各个函数并将返回的错误添加到multiError中。

import "golang.org/x/xerrors"

func main() {
    // 创建 MultiError
    multiError := errors.MultiError(nil)

    // 调用外部函数并添加错误
    err := f1()
    if err != nil {
        multiError = multiError.Append(err)
    }
    err = f2()
    if err != nil {
        multiError = multiError.Append(err)
    }

    // 处理 MultiError
    if multiError != nil {
        switch {
        case errors.Is(multiError, os.ErrNotExist):
            // 处理 os.ErrNotExist 错误
        case errors.Is(multiError, someError):
            // 处理 someError 错误
        default:
            // 处理其他错误
        }
    }
}

func f1() error {
    return os.Open("no-such-file")
}

func f2() error {
    return someError{err: "some error"}
}

// 自定义错误类型
type someError struct {
    err string
}

func (e someError) Error() string {
    return e.err
}

通过使用errors.MultiErrorerrors.Is/errors.As

🎜Verwendung: 🎜🎜
  1. 🎜🎜 Bestimmen Sie, ob es sich um einen zugrunde liegenden Fehler handelt 🎜🎜rrreee
  2. 🎜🎜 Konvertierung in einen bestimmten Typ erzwingen 🎜🎜rrreee
🎜🎜 Praktischer Fall: 🎜🎜🎜Angenommen, es gibt eine Funktion, die mehrere externe Funktionen aufrufen muss, und jede Funktion kann einen Fehler zurückgeben. Um alle diese Fehler gleichzeitig zu behandeln, können Sie mit errors.MultiError einen multiError in einer Funktion erstellen, dann die einzelnen Funktionen aufrufen und die zurückgegebenen Fehler zu multiError >Mittel. 🎜rrreee🎜 Mehrere Fehler können in Golang problemlos gleichzeitig behandelt werden, indem die Funktionen errors.MultiError und errors.Is/errors.As verwendet werden. 🎜

Das obige ist der detaillierte Inhalt vonWie gehe ich mit mehreren Fehlern gleichzeitig in Golang um?. 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