So legen Sie den Kontextwert in einer http.HandleFunc fest, ohne das Anforderungsobjekt zu überschreiben
Im bereitgestellten Code folgte der Ansatz in func setValue to Das Festlegen eines Kontextwerts innerhalb von *http.Request wirft Bedenken hinsichtlich des Überschreibens des Anforderungsobjekts auf. Hier ist ein korrigierter Ansatz:
func setValue(r *http.Request, val string) *http.Request { ctx := context.WithValue(r.Context(), myContext, val) return r.WithContext(ctx) // return shallow copy to avoid overwriting request object }
Wenn Sie den Kontextwert in http.HandleFunc festlegen, geben Sie einen Zeiger auf die neu erstellte Anfrage mit dem aktualisierten Kontext zurück. Dadurch vermeiden wir eine Änderung des ursprünglichen Anforderungsobjekts und stellen sicher, dass nachfolgende Handler den richtigen Kontextwert erhalten:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") })
Wenn der Handler einen anderen Handler aufruft, geben Sie die aktualisierte Anfrage mit dem Kontextwert weiter, um die Kontinuität sicherzustellen :
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") someOtherHandler.ServeHTTP(w, r) // pass updated request to subsequent handler })
Durch die Verwendung dieses Ansatzes können wir Kontextwerte innerhalb von http.HandleFunc effektiv festlegen, ohne das ursprüngliche Anforderungsobjekt zu gefährden.
Das obige ist der detaillierte Inhalt vonWie lege ich einen Kontextwert in einer http.HandleFunc fest, ohne das Anforderungsobjekt zu überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!