Heim > Backend-Entwicklung > Golang > Wie kann Go Middleware effektiv mit Fehlern umgehen, die von Anforderungshandlern zurückgegeben werden?

Wie kann Go Middleware effektiv mit Fehlern umgehen, die von Anforderungshandlern zurückgegeben werden?

DDD
Freigeben: 2024-12-16 15:39:18
Original
420 Leute haben es durchsucht

How Can Go Middleware Effectively Handle Errors Returned by Request Handlers?

Middleware mit Fehler zurückgebenden Anforderungshandlern

Middleware in Go isoliert Probleme und erweitert Anforderungshandler um zusätzliche Funktionen. Das traditionelle Middleware-Muster beinhaltet die Ausführung von Handlern vor und nach dem Hauptanforderungshandler. Es fehlt jedoch die Unterstützung für die Fehlerbehandlung, was umständlich sein kann.

Anforderungshandler zur Fehlerbehandlung

Um dieses Problem zu beheben, können wir Anforderungshandler zur Fehlerbehandlung verwenden, die wie folgt definiert sind:

type errorHandler func(http.ResponseWriter, *http.Request) error
Nach dem Login kopieren

Diese Handler ermöglichen es uns, Fehler direkt zurückzugeben, wodurch die Fehlerbehandlung intuitiver wird.

Kombination von Middleware mit Fehlerbehandlungshandler

Um das Middleware-Muster mit Fehlerbehandlungshandlern zu kombinieren, führen wir eine zusätzliche Middleware ein, die als letzter Schritt in der Kette dient:

func errorHandler(h MyHandlerFunc) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        err := h(w, r)
        if err != nil {
            // Handle error here
        }
    })
}
Nach dem Login kopieren

Diese Middleware umschließt das Besondere Typ der Handlerfunktion MyHandlerFunc, die Fehler zurückgibt.

Verwendung

Um dieses Muster zu verwenden, wickeln Sie Ihr ein Fehlerbehandlungshandler mit der Middleware errorHandler und fügen Sie ihn am Ende der Middlewarekette hinzu:

moreMiddleware(myMiddleware(errorHandler(myhandleFuncReturningError)))
Nach dem Login kopieren

Beispiel

Betrachten Sie das folgende Beispiel:

func loggingHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Before executing the handler.
        start := time.Now()
        log.Printf("Started %s %s", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
        // After executing the handler.
        log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
    })
}

func errorHandle(w http.ResponseWriter, r *http.Request) error {
    w.Write([]byte(`Hello World from errorHandle!`))
    return nil
}

func main() {
    http.Handle("/", errorHandler(errorHandle))
    log.Fatal(http.ListenAndServe(":8080", nil))
}
Nach dem Login kopieren

In In diesem Beispiel ist loggingHandler eine herkömmliche Middleware, während errorHandle ein Fehlerbehandlungs-Anforderungshandler ist. Die errorHandler-Middleware umschließt errorHandle und stellt sicher, dass Fehler angemessen behandelt werden.

Das obige ist der detaillierte Inhalt vonWie kann Go Middleware effektiv mit Fehlern umgehen, die von Anforderungshandlern zurückgegeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage