Maison > Article > développement back-end > Comment manipuler en toute sécurité les valeurs de contexte dans les gestionnaires HTTP Go ?
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!