Heim > Backend-Entwicklung > Golang > Wie gehe ich mit Fehlern in Go-Middleware-Ketten um?

Wie gehe ich mit Fehlern in Go-Middleware-Ketten um?

Barbara Streisand
Freigeben: 2024-12-05 20:12:12
Original
518 Leute haben es durchsucht

How to Handle Errors in Go Middleware Chains?

Middleware-Muster mit Fehler zurückgebenden Handlern

Frage: Wie kann ich das Go-Middleware-Muster mit Anforderungshandlern kombinieren, die Fehler zurückgeben?

Antwort:

Das Middleware-Muster in Mit Go können wiederverwendbare Komponenten erstellt werden, die auf HTTP-Handler angewendet werden können. Herkömmliche Middleware-Funktionen behandeln Fehler jedoch nicht nativ.

Um die Fehlerbehandlung in Middleware zu ermöglichen, wird empfohlen, eine separate Middleware-Funktion zu verwenden, die diesem Zweck gewidmet ist. Diese Funktion sollte am Ende der Middleware-Kette platziert werden und Fehler verarbeiten, die von den Handlern innerhalb der Kette zurückgegeben werden.

// Pattern for a middleware function that checks for errors from the next handler.
func errorHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        err := next.ServeHTTP(w, r)
        if err != nil {
            // Handle the error, e.g., by logging or returning an appropriate HTTP response.
        }
    })
}
Nach dem Login kopieren

Beispiel:

Zur Kombination von Fehler- Zurückgeben von Handlern mit der Protokollierungs-Middleware aus dem ursprünglichen Beispiel:

type errorHandler func(http.ResponseWriter, *http.Request) error

// Create a special error-aware logging middleware.
func loggingWithErrorHandler(next errorHandler) errorHandler {
    return func(w http.ResponseWriter, r *http.Request) error {
        // Before executing the handler.
        start := time.Now()
        log.Printf("Started %s %s", r.Method, r.URL.Path)
        err := next(w, r)
        // After executing the handler.
        log.Printf("Completed %s in %v", r.URL.Path, time.Since(start))
        return err
    }
}

// Define an error-returning handler func.
func errorHandlerFunc(w http.ResponseWriter, r *http.Request) error {
    w.Write([]byte("Hello World from errorHandlerFunc!"))
    return nil
}

// Assemble the middleware chain and error-aware middleware.
http.Handle("/", loggingWithErrorHandler(errorHandlerFunc))
Nach dem Login kopieren

Diese Kombination ermöglicht die Fehlerbehandlung unter Beibehaltung der Vorteile der Middleware Muster. Die umschlossene fehlerbewusste Middleware verarbeitet alle vom umschlossenen Handler zurückgegebenen Fehler.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Fehlern in Go-Middleware-Ketten um?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage