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

王林
王林avant
2024-02-11 23:03:081023parcourir

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

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer