Dans le domaine de la gestion des requêtes HTTP à l'aide de http.HandleFunc de Go, il est souvent nécessaire de propager des valeurs de contexte dans le code. L'approche conventionnelle consiste à définir une clé de contexte personnalisée et à utiliser la fonction context.WithValue, mais des problèmes peuvent survenir concernant l'écrasement potentiel de l'objet de requête d'origine.
Pour résoudre ce problème préoccupation, une approche révisée élimine l’écrasement de l’objet de la demande. Au lieu de cela, la méthode Request.WithContext est utilisée pour créer une copie superficielle de la demande, en préservant l'objet d'origine et son contexte. En renvoyant un pointeur vers cette copie superficielle, le code suivant opère sur le contexte mis à jour sans perturber la requête d'origine.
// Context key to store the value var myContext = contextKey("myContext") // Function to set a context value func setValue(r *http.Request, val string) *http.Request { return r.WithContext(context.WithValue(r.Context(), myContext, val)) } // http.HandleFunc example http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") })
Dans ce code révisé, la fonction setValue crée un copie superficielle de la requête, ajoutant la valeur de contexte à la nouvelle requête. La demande d'origine reste intacte, garantissant l'intégrité du contexte tout au long du processus de traitement de la demande.
Pour garantir que le contexte modifié est transmis aux gestionnaires suivants, la demande mise à jour L'objet doit être explicitement transmis à d'autres gestionnaires. Cela peut être fait comme suit :
// Passing the updated request to another handler http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") someOtherHandler.ServeHTTP(w, r) })
En suivant ces directives, les valeurs de contexte peuvent être définies et propagées efficacement dans http.HandleFuncs, préservant l'intégrité de l'objet de requête d'origine et garantissant un flux de contexte transparent tout au long de la requête. -processus de manipulation.
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!