Heim  >  Artikel  >  Backend-Entwicklung  >  Was bedeutet die Go/Gin-Debug-Ausgabe – (x-Handler)

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

WBOY
WBOYnach vorne
2024-02-09 08:15:19510Durchsuche

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)

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

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

Drucken:

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen