Middleware-Pattern
Handler für Logging und Authentifizierung verketten
Middleware-Pattern ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist Middleware?
Middleware ist eine Funktion, die einen http.Handler umschließt, um übergreifendes Verhalten wie Logging, Authentifizierung und Fehlerbehandlung hinzuzufügen, ohne die Geschäftslogik des Handlers zu ändern.
Middleware-Signatur
Eine Middleware ist eine Funktion, die einen http.Handler entgegennimmt und einen http.Handler zurückgibt:
type Middleware func(http.Handler) http.HandlerEinfache Logging-Middleware
Protokollieren Sie jede Anfrage, bevor und nachdem der Handler ausgeführt wird:
func Logger(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s %s", r.Method, r.URL.Path)
next.ServeHTTP(w, r)
log.Printf("done %s", r.URL.Path)
})
}Middleware verketten
Wenden Sie mehrere Middleware-Schichten an, indem Sie sie ineinander verschachteln:
handler := Logger(Auth(RateLimit(myHandler)))
http.ListenAndServe(":8080", handler)Hilfsfunktion für Middleware-Ketten
Erstellen Sie eine Chain-Funktion, die Middleware in der richtigen Reihenfolge anwendet, ohne eine tiefe Verschachtelung zu benötigen:
func Chain(h http.Handler, m ...Middleware) http.Handler {
for i := len(m)-1; i >= 0; i-- {
h = m[i](h)
}
return h
}
// Usage: Chain(myHandler, Logger, Auth, RateLimit)Authentifizierungs-Middleware
Prüfen Sie die Authentifizierung, bevor Sie den nächsten Handler aufrufen. Geben Sie frühzeitig 401 zurück, wenn das Token fehlt oder ungültig ist.
func Auth(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
token := r.Header.Get("Authorization")
if !isValid(token) {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
next.ServeHTTP(w, r)
})
}Middleware zur Panic-Wiederherstellung
Fangen Sie Panics aus Handlern ab, damit der Server nicht abstürzt:
func Recovery(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Printf("panic: %v", err)
http.Error(w, "Internal Server Error", 500)
}
}()
next.ServeHTTP(w, r)
})
}Daten über den Context übergeben
Middleware kann Daten am Anfrage-Context anfügen, damit nachgelagerte Handler darauf zugreifen können:
ctx := context.WithValue(r.Context(), userKey, user)
next.ServeHTTP(w, r.WithContext(ctx))Response-Wrapper
Erfassen Sie den vom Handler geschriebenen Statuscode, indem Sie ResponseWriter umschließen:
type statusRecorder struct {
http.ResponseWriter
status int
}
func (r *statusRecorder) WriteHeader(code int) {
r.status = code
r.ResponseWriter.WriteHeader(code)
}Die Reihenfolge ist wichtig
Middleware wird in der Reihenfolge ausgeführt, in der sie den Handler umschließt. Die Authentifizierung sollte vor der Ratenbegrenzung ausgeführt werden; die Panic-Wiederherstellung sollte außen liegen, damit sie Panics aus anderer Middleware abfängt.
Routenbezogene und globale Middleware
Wenden Sie globale Middleware wie Logging und Fehlerbehandlung auf den gesamten Mux an. Wenden Sie routenspezifische Middleware wie Authentifizierung und Ratenbegrenzung mithilfe eines Subrouters oder eines Handler-Wrappers auf bestimmte Routengruppen an.
Kurzer Test
Welche Signatur hat eine HTTP-Middleware in Go?
Zusammenfassung: Middleware-Muster
Wichtige Punkte:
- Middleware: func(http.Handler) http.Handler
- Durch Verschachtelung verketten; für bessere Übersicht eine Chain-Hilfsfunktion verwenden
- Fehlerbehandlung außen; Authentifizierung vor der Geschäftslogik
- Daten über den Context an nachgelagerte Handler übergeben
Häufig gestellte Fragen
Ist die Lektion „Middleware-Pattern“ kostenlos?
Ja — der vollständige Text von „Middleware-Pattern“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Middleware-Pattern“?
Handler für Logging und Authentifizierung verketten Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Middleware-Pattern“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Einen HTTP-Server erstellen
- Routing und Pfadparameter
- Middleware-Pattern
- Graceful Shutdown