Maison > développement back-end > Golang > Golang et Gin Web Framework - Exécuter le code après router.Run()

Golang et Gin Web Framework - Exécuter le code après router.Run()

王林
Libérer: 2024-02-11 23:03:08
avant
999 Les gens l'ont consulté

Golang 和 Gin Web 框架 - 在 router.Run() 之后执行代码

L'éditeur php Banana vous propose un contenu passionnant sur le framework Web Golang et Gin. Lors de l'écriture d'applications Web à l'aide de Gin, nous devons souvent exécuter du code après router.Run(). Ces codes peuvent inclure la connexion à la base de données, l'initialisation du cache et d'autres opérations. Cet article présentera en détail comment implémenter la méthode d'exécution de code après router.Run() dans le framework Gin, vous aidant à mieux maîtriser les compétences d'utilisation du framework Gin.

Contenu des questions

Je suis assez nouveau, alors excusez-moi si c'est quelque chose d'évident.

Je suis en train d'écrire du code pour l'authentification oauth 2.0. Cela signifie en partie que je dois disposer d’une URL de rappel. Dans mon code, je dois créer un point de terminaison de rappel et une fois qu'il est opérationnel, je dois appeler un point de terminaison d'autorisation qui se connectera ensuite à mon point de terminaison de rappel.

Mon problème est que l'appel de run() dans gin bloque mon exécution, je ne peux donc plus accorder d'autorisation une fois que le point de terminaison de rappel est opérationnel. Existe-t-il un moyen d'exécuter ce code dans une goroutine distincte afin que je puisse ensuite terminer le processus d'autorisation ?

Voici un exemple approximatif du code de ma fonction principale :

r := gin.Default()
//ReqHandler is an HtttpHandler func
r.GET("/redirect", ReqHandler)

r.Run(":5001")
ContinueAuth()
Copier après la connexion

Solution

Créez un auditeur dans la goroutine principale. Démarrez le serveur http dans goroutine. Continuez le flux d'authentification dans la goroutine principale.

r := gin.Default()
r.GET("/redirect", ReqHandler)

l, err := net.Listen("tcp", ":5001")
if err != nil {
    log.Fatal(err)
}

go func() {
   log.Fatal(r.RunListener(l))
}()

ContinueAuth()

select {} // wait forever
Copier après la connexion

La création de l'écouteur dans la goroutine principale garantit que l'écouteur est prêt à rappeler à partir du flux d'authentification.

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal