Maison  >  Article  >  développement back-end  >  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
Barbara Streisandoriginal
2024-11-19 07:02:03660parcourir

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")
})

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)
})

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!

Déclaration:
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