Heim > Backend-Entwicklung > Golang > Wie lege ich einen Kontextwert in einer http.HandleFunc fest, ohne das Anforderungsobjekt zu überschreiben?

Wie lege ich einen Kontextwert in einer http.HandleFunc fest, ohne das Anforderungsobjekt zu überschreiben?

Linda Hamilton
Freigeben: 2024-11-24 16:47:16
Original
681 Leute haben es durchsucht

How to Set Context Value in an http.HandleFunc without Overwriting the Request Object?

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
}
Nach dem Login kopieren

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")
})
Nach dem Login kopieren

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
})
Nach dem Login kopieren

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!

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