Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich verzögerte Funktionen mit zurückgegebenen Variablen in Go fehlerfrei verarbeiten?

Wie kann ich verzögerte Funktionen mit zurückgegebenen Variablen in Go fehlerfrei verarbeiten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-04 08:22:01802Durchsuche

How Can I Handle Deferred Functions with Returned Variables in Go without Errors?

gometalinter / errcheck und verzögerte Funktionen mit zurückgegebenen Variablen

gometalinter und errcheck-Tools lösen eine Warnung aus, wenn eine Funktion, die eine Variable zurückgibt, zurückgestellt wird. Dies liegt daran, dass die Rückgabewerte verzögerter Funktionen verworfen werden, sodass die zurückgegebene Fehlervariable nicht überprüft wird.

Der empfohlene Ansatz besteht darin, eine andere Funktion zu verschieben, die die ursprüngliche Funktion aufruft und ihren Rückgabewert verarbeitet. Dies kann mithilfe einer anonymen Funktion wie folgt erfolgen:

<code class="go">defer func() {
    if err := r.Body.Close(); err != nil {
        fmt.Println("Error when closing:", err)
    }
}()</code>

Alternativ können Sie eine Hilfsfunktion zur Fehlerprüfung erstellen:

<code class="go">func Check(f func() error) {
    if err := f(); err != nil {
        fmt.Println("Received error:", err)
    }
}</code>

Verwendung:

<code class="go">defer Check(r.Body.Close)</code>

Für mehrere verzögerte Funktionen sollten Sie eine Hilfsfunktion in Betracht ziehen, die mehrere Funktionen übernimmt:

<code class="go">func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            fmt.Println("Received error:", err)
        }
    }
}</code>

Verwendung:

<code class="go">defer Checks(r.Body.Close, SomeOtherFunc)</code>

Beachten Sie, dass die Abwärtsschleife in Checks() die Ausführungsreihenfolge nachahmt von verzögerten Funktionen (last-in-first-out).

Das obige ist der detaillierte Inhalt vonWie kann ich verzögerte Funktionen mit zurückgegebenen Variablen in Go fehlerfrei verarbeiten?. 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