Maison > développement back-end > Golang > Que signifie la sortie de débogage Go/Gin - (x gestionnaires)

Que signifie la sortie de débogage Go/Gin - (x gestionnaires)

WBOY
Libérer: 2024-02-09 08:15:19
avant
543 Les gens l'ont consulté

Go/Gin 调试输出的含义是什么 - (x handlers)

l'éditeur php Youzi vous expliquera la signification de "(x handlers)" dans la sortie de débogage Go/Gin. Dans le framework Gin du langage Go, "(x handlers)" représente le nombre de middlewares traversés par la requête. Le middleware est un mécanisme du framework Gin pour le traitement des requêtes. Il peut effectuer certaines opérations avant ou après que la requête atteigne la fonction de traitement de routage. Chaque middleware transmet la requête au middleware suivant jusqu'à ce qu'il atteigne finalement la fonction de gestionnaire. Le « x » dans « (x handlers) » représente le nombre de middlewares, ce qui peut aider les développeurs à comprendre combien de middlewares ont été traités lors du traitement des requêtes. En observant le nombre de middlewares, les développeurs peuvent mieux comprendre le processus de traitement des requêtes et faciliter le débogage et l'optimisation du code. J'espère que cette réponse vous aidera !

Contenu de la question

Dans la sortie de débogage go/gin ci-dessous, quelle est la signification de (5 gestionnaires). Comme vous pouvez le constater, j'ai évidemment plus de 5 handlers.

[GIN-debug] GET    /                         --> .../handlers.APIDetail (5 handlers)
[GIN-debug] POST   /signup                   --> .../handlers.SignUp (5 handlers)
[GIN-debug] POST   /signin                   --> .../handlers.SignIn (5 handlers)
[GIN-debug] POST   /refresh-token            --> .../handlers.RefreshToken (5 handlers)
[GIN-debug] POST   /verify-email             --> .../handlers.VerifyEmailVerificationToken (5 handlers)
[GIN-debug] POST   /resend-verification-email --> .../handlers.ResendEmailVerificationEmail (5 handlers)
[GIN-debug] POST   /reset-password           --> .../handlers.ResetPassword (5 handlers)
[GIN-debug] POST   /change-password          --> .../handlers.ChangePassword (5 handlers)
[GIN-debug] PATCH  /users/me                 --> .../handlers.UpdateProfile (5 handlers)
[GIN-debug] POST   /signout                  --> .../handlers.SignOut (5 handlers)
[GIN-debug] GET    /orgs/:id                 --> .../handlers.GetOrganizations (5 handlers)
[GIN-debug] GET    /orgs                     --> .../handlers.GetOrganizations (5 handlers)
Copier après la connexion

Solution de contournement

Il doit s'agir du nombre de gestionnaires dans la chaîne de gestionnaires de chaque route, c'est-à-dire le nombre maximum de gestionnaires (y compris le middleware) qui seront exécutés lorsqu'une requête est acheminée vers un certain point de terminaison.

Le code correspondant provient de la source gin @latest :

func debugprintroute(httpmethod, absolutepath string, handlers handlerschain) {
    if isdebugging() {
        nuhandlers := len(handlers)
        handlername := nameoffunction(handlers.last())
        if debugprintroutefunc == nil {
            debugprint("%-6s %-25s --> %s (%d handlers)\n", httpmethod, absolutepath, handlername, nuhandlers)
        } else {
            debugprintroutefunc(httpmethod, absolutepath, handlername, nuhandlers)
        }
    }
}
Copier après la connexion

Si vous configurez un middleware global, par exemple en utilisant router.use, avant de déclarer la route, et qu'aucune route n'a de middleware pour chaque route, cela explique pourquoi les nombres sont toujours les mêmes.

Par exemple, considérez ce qui suit :

r.use(func(*gin.context) { fmt.println("first") })
    r.get("/foo", func(c *gin.context) {
        c.status(http.statusok)
    })

    r.use(func(*gin.context) { fmt.println("second") })
    r.get("/bar", func(c *gin.context) {
        c.status(http.statusok)
    })
Copier après la connexion

Impression :

[GIN-debug] GET    /foo    --> main.main.func2 (2 handlers)
[GIN-debug] GET    /bar    --> main.main.func4 (3 handlers)
Copier après la connexion

À cause du /foo 的链有 first 中间件和处理程序本身 (2),而 /bar 的链有 firstsecond du middleware, plus du gestionnaire lui-même (3).

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!

Étiquettes associées:
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