Heim >Backend-Entwicklung >Golang >Wie übergebe ich den Kontext in Middleware und Handlern in Go ordnungsgemäß?
Das Verständnis des Kontexts in Go kann verwirrend sein. Lassen Sie uns untersuchen, wie Sie Kontext effektiv an Middleware und Handler übergeben können.
Um Kontext an Middleware zu übergeben, führen Sie die folgenden Schritte aus:
Zum Beispiel, um der Anfrage eine Zeitüberschreitung hinzuzufügen:
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second)) defer cancel() r = r.WithContext(ctx)
An Übergeben Sie den Kontext an Handler:
Zum Beispiel, um die Benutzer-ID zum Kontext hinzuzufügen:
ctx := context.WithValue(r.Context(), ContextUserKey, "theuser") h.ServeHTTP(w, r.WithContext(ctx))
Hier ist eine Beispielimplementierung von Middleware und einem Handler Kontext verwenden:
func checkAuth(authToken string) util.Middleware { return func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Auth") != authToken { util.SendError(w, "...", http.StatusForbidden, false) return } // Add authentication-specific context here h.ServeHTTP(w, r) }) } } type Handler struct { ... ... } func (h *HandlerW) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Get context values here decoder := json.NewDecoder(r.Body) // ... } func main() { router := mux.NewRouter() authToken, ok := getAuthToken() if !ok { panic("...") } authCheck := checkAuth(authToken) h := Handler{ ... } router.Handle("/hello", util.UseMiddleware(authCheck, Handler, ...)) }
Das obige ist der detaillierte Inhalt vonWie übergebe ich den Kontext in Middleware und Handlern in Go ordnungsgemäß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!