Was bedeutet die Go/Gin-Debug-Ausgabe – (x-Handler)

WBOY
Freigeben: 2024-02-09 08:15:19
nach vorne
509 Leute haben es durchsucht

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

php-Editor Youzi erklärt Ihnen die Bedeutung von „(x-Handler)“ in der Go/Gin-Debugging-Ausgabe. Im Gin-Framework der Go-Sprache stellt „(x Handler)“ die Anzahl der Middleware dar, die die Anfrage durchläuft. Middleware ist ein Mechanismus im Gin-Framework zur Verarbeitung von Anforderungen. Sie kann einige Vorgänge ausführen, bevor oder nachdem die Anforderung die Routing-Verarbeitungsfunktion erreicht. Jede Middleware gibt die Anfrage an die nächste Middleware weiter, bis sie schließlich die Handler-Funktion erreicht. Das „x“ in „(x Handler)“ stellt die Anzahl der Middlewares dar, was Entwicklern helfen kann, zu verstehen, wie viele Middlewares während der Anforderungsverarbeitung verarbeitet wurden. Durch die Beobachtung der Anzahl der Middlewares können Entwickler den Anforderungsverarbeitungsprozess besser verstehen und das Debuggen und Optimieren des Codes erleichtern. Ich hoffe, diese Antwort hilft Ihnen!

Frageninhalt

Was bedeutet (5 Handler) in der Go/Gin-Debug-Ausgabe unten? Wie Sie sehen, habe ich offensichtlich mehr als 5 Handler.

[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)
Nach dem Login kopieren

Workaround

Es sollte die Anzahl der Handler in der Handler-Kette jeder Route sein, d. h. die maximale Anzahl von Handlern (einschließlich Middleware), die ausgeführt werden, wenn eine Anfrage an einen bestimmten Endpunkt weitergeleitet wird.

Der relevante Code stammt aus der gin-Quelle @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)
        }
    }
}
Nach dem Login kopieren

Wenn Sie eine globale Middleware einrichten, z. B. mit router.use, bevor Sie die Route deklarieren, und keine Route über Middleware für jede Route verfügt, erklärt dies, warum die Zahlen immer gleich sind.

Bedenken Sie zum Beispiel Folgendes:

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)
    })
Nach dem Login kopieren

Drucken:

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

Aufgrund /foo 的链有 first 中间件和处理程序本身 (2),而 /bar 的链有 firstsecond der Middleware und des Handlers selbst (3).

Das obige ist der detaillierte Inhalt vonWas bedeutet die Go/Gin-Debug-Ausgabe – (x-Handler). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage