Maison > développement back-end > Golang > Comment transmettre efficacement le contexte aux middlewares et aux gestionnaires dans Golang ?

Comment transmettre efficacement le contexte aux middlewares et aux gestionnaires dans Golang ?

Barbara Streisand
Libérer: 2024-11-10 10:36:02
original
287 Les gens l'ont consulté

How to Effectively Pass Context to Middleware and Handlers in Golang?

Passer le contexte dans la requête Golang au middleware

Comprendre le mécanisme de contexte introduit dans Golang 1.7 peut être difficile. Cet article vise à clarifier comment transmettre efficacement le contexte aux fonctions de middleware et de gestionnaire.

Dérivation des contextes

Comme mentionné dans le billet de blog Go Concurrency Patterns, vous pouvez dériver des contextes. du contexte d’arrière-plan. L'objet Request fournit également les méthodes Context et WithContext. Cela vous permet de créer des contextes personnalisés à des fins spécifiques.

Implémentation du délai d'attente

Dans votre gestionnaire de requêtes, vous pouvez spécifier un délai d'attente à l'aide de la méthode WithTimeout. Cela crée un contexte dérivé avec un délai d'expiration défini.

ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second))
defer cancel()
r = r.WithContext(ctx)
Copier après la connexion

Ajout d'informations utilisateur au contexte

Dans votre vérificateur d'autorisation, vous pouvez ajouter des informations utilisateur au contexte avant appelant ServeHTTP.

type ContextKey string

const ContextUserKey ContextKey = "user"

// ...

ctx := context.WithValue(r.Context(), ContextUserKey, "theuser")
h.ServeHTTP(w, r.WithContext(ctx))
Copier après la connexion

Récupération des informations utilisateur de Context

Depuis le gestionnaire, vous pouvez accéder aux informations utilisateur à partir du contexte.

user := r.Context().Value(ContextUserKey)
doSomethingForThisUser(user.(string))
Copier après la connexion

Chainage du middleware avec le contexte

Dans votre fonction principale, vous pouvez enchaîner les gestionnaires de middleware à l'aide de util.UseMiddleware, en transmettant le contexte à travers chacun. handler.

router.Handle("/hello", util.UseMiddleware(authCheck, HandlerW, ...))
Copier après la connexion

Conclusion

En suivant ces étapes, vous pouvez transmettre efficacement le contexte des requêtes Golang aux fonctions middleware et gestionnaire, améliorant ainsi la flexibilité et maintenant la sécurité des threads au sein votre code.

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