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

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

WBOY
WBOYavant
2024-02-09 08:15:19457parcourir

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)

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

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

Impression :

[GIN-debug] GET    /foo    --> main.main.func2 (2 handlers)
[GIN-debug] GET    /bar    --> main.main.func4 (3 handlers)

À 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!

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