Maison > développement back-end > Golang > le corps du texte

Comment définir la valeur de contexte dans un http.HandleFunc sans écraser l'objet de requête ?

Linda Hamilton
Libérer: 2024-11-24 16:47:16
original
626 Les gens l'ont consulté

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

Comment définir la valeur de contexte dans un http.HandleFunc sans écraser l'objet de requête

Dans le code fourni, l'approche suivie dans func setValue pour définir une valeur de contexte à l'intérieur de *http.Request soulève des inquiétudes quant à l'écrasement de l'objet de requête. Voici une approche corrigée :

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
}
Copier après la connexion

Lors de la définition de la valeur de contexte dans http.HandleFunc, renvoyez un pointeur vers la requête nouvellement créée avec le contexte mis à jour. En faisant cela, nous évitons de modifier l'objet de requête d'origine et garantissons que les gestionnaires suivants reçoivent la valeur de contexte correcte :

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    r = setValue(r, "foobar")
})
Copier après la connexion

Si le gestionnaire invoque un autre gestionnaire, transmettez la requête mise à jour avec la valeur de contexte pour assurer la continuité. :

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    r = setValue(r, "foobar")
    someOtherHandler.ServeHTTP(w, r) // pass updated request to subsequent handler
})
Copier après la connexion

En utilisant cette approche, nous pouvons définir efficacement des valeurs de contexte dans http.HandleFunc sans compromettre l'objet de requête d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal