Maison > développement back-end > Golang > Comment manipuler en toute sécurité les valeurs de contexte dans les gestionnaires HTTP Go ?

Comment manipuler en toute sécurité les valeurs de contexte dans les gestionnaires HTTP Go ?

Barbara Streisand
Libérer: 2024-11-19 07:02:03
original
743 Les gens l'ont consulté

How to Safely Manipulate Context Values in Go HTTP Handlers?

Manipulation des valeurs contextuelles dans les gestionnaires HTTP

La définition de valeurs contextuelles dans les gestionnaires HTTP est cruciale pour le partage de données entre les gestionnaires de requêtes. Dans le package HTTP de Go, la fonction http.HandleFunc est couramment utilisée pour enregistrer les gestionnaires. Cependant, l'approche consistant à définir des valeurs de contexte à l'aide de *r = *r.WithContext(ctx) soulève des inquiétudes.

Approche recommandée

Pour éviter d'écraser l'objet de requête, ce qui peut conduire à un comportement inattendu, il est préférable de renvoyer une nouvelle copie superficielle de la requête avec la valeur de contexte modifiée.

func setValue(r *http.Request, val string) *http.Request {
  return r.WithContext(context.WithValue(r.Context(), myContext, val))
}

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

Cette approche garantit que l'objet de requête d'origine reste inchangé et le contexte mis à jour est propagé à n'importe quel 后续处理程序调用。

Transmission de la requête mise à jour

Si le gestionnaire doit appeler un autre gestionnaire , il est crucial de transmettre l'objet de requête mis à jour au nouveau gestionnaire. Sinon, la valeur de contexte modifiée ne sera pas disponible pour le gestionnaire suivant.

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

En suivant ces bonnes pratiques, vous pouvez gérer efficacement les valeurs de contexte au sein des gestionnaires HTTP, permettant un partage de données efficace et des transitions transparentes entre les gestionnaires de requêtes. .

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