Heim  >  Artikel  >  Backend-Entwicklung  >  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
Linda HamiltonOriginal
2024-11-24 16:47:16625Durchsuche

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
}

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!

Stellungnahme:
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