Heim >Backend-Entwicklung >Golang >Wie kann man mehrere Fehler in Go elegant behandeln?

Wie kann man mehrere Fehler in Go elegant behandeln?

DDD
DDDOriginal
2024-11-29 21:09:15902Durchsuche

How to Gracefully Handle Multiple Errors in Go?

Der elegante Umgang mit mehreren Fehlern in Go

In Go kann der saubere und präzise Umgang mit mehreren Fehlern eine Herausforderung sein. Betrachten Sie den folgenden Codeausschnitt:

aJson, err1 := json.Marshal(a)
bJson, err2 := json.Marshal(b)
cJson, err3 := json.Marshal(c)
dJson, err4 := json.Marshal(d)
eJson, err5 := json.Marshal(e)
fJson, err6 := json.Marshal(f)
gJson, err4 := json.Marshal(g)

if err1 != nil {
    return err1
} else if err2 != nil {
    return err2
} else if err3 != nil {
    return err3
} else if err4 != nil {
    return err4
} else if err5 != nil {
    return err5
} else if err5 != nil {
    return err5
} else if err6 != nil {
    return err6
}

Dieser Code weist mehrere Probleme auf. Erstens werden mehrere if-Anweisungen verwendet, um jeden Fehler separat zu behandeln. Dadurch wird der Code ausführlich und schwer lesbar. Zweitens gibt es den ersten aufgetretenen Fehler zurück, der möglicherweise nicht der wichtigste oder relevanteste Fehler ist.

Es gibt eine bessere Möglichkeit, mehrere Fehler in Go mithilfe eines Funktionsabschlusses zu behandeln. Hier ist eine überarbeitete Version des Codes, der einen Funktionsabschluss verwendet:

var err error
f := func(dest *D, src S) bool {
    *dest, err = json.Marshal(src)
    return err == nil
}

f(&aJson, a) &&
    f(&bJson, b) &&
    f(&cJson, c) &&
    f(&dJson, d) &&
    f(&eJson, e) &&
    f(&fJson, f) &&
    f(&gJson, g)

return err

Dieser Code definiert einen Funktionsabschluss (f), der zwei Parameter akzeptiert: einen Zeiger auf eine Zielvariable und einen Quellwert. Der Abschluss versucht, den Quellwert in die Zielvariable zumarshallieren, und setzt einen Fehler, wenn dies nicht gelingt.

Der Funktionsabschluss wird dann für jeden Quellwert aufgerufen und die Ergebnisse werden mit dem &&-Operator kombiniert. Wenn einer der Funktionsabschlüsse einen Fehler zurückgibt, wird die Gesamtvariable err entsprechend gesetzt. Andernfalls ist die Variable err gleich Null.

Dieser Code ist viel sauberer und prägnanter als der Originalcode. Außerdem werden alle Fehler auf einmal behandelt, sodass der wichtigste Fehler leichter identifiziert werden kann.

Das obige ist der detaillierte Inhalt vonWie kann man mehrere Fehler in Go elegant behandeln?. 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