Rumah >pembangunan bahagian belakang >Golang >Apakah maksud output nyahpepijat Go/Gin - (x pengendali)

Apakah maksud output nyahpepijat Go/Gin - (x pengendali)

WBOY
WBOYke hadapan
2024-02-09 08:15:19545semak imbas

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

editor php Youzi akan menerangkan kepada anda maksud "(pengendali x)" dalam output penyahpepijatan Go/Gin. Dalam rangka kerja Gin bahasa Go, "(x pengendali)" mewakili bilangan perisian tengah yang dilalui oleh permintaan. Middleware ialah mekanisme dalam rangka kerja Gin untuk memproses permintaan. Ia boleh melakukan beberapa operasi sebelum atau selepas permintaan mencapai fungsi pemprosesan penghalaan. Setiap middleware menghantar permintaan kepada middleware seterusnya sehingga ia akhirnya mencapai fungsi pengendali. "x" dalam "(pengendali x)" mewakili bilangan perisian tengah, yang boleh membantu pembangun memahami bilangan perisian tengah yang telah diproses semasa pemprosesan permintaan. Dengan memerhatikan bilangan middleware, pembangun boleh lebih memahami proses pemprosesan permintaan dan memudahkan penyahpepijatan serta mengoptimumkan kod. Harap jawapan ini membantu anda!

Kandungan soalan

Dalam keluaran nyahpepijat go/gin di bawah, apakah maksud (5 pengendali). Seperti yang anda lihat, saya jelas mempunyai lebih daripada 5 pengendali.

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

Penyelesaian

Ia mestilah bilangan pengendali dalam setiap rantai pengendali laluan, iaitu bilangan maksimum pengendali (termasuk perisian tengah) yang akan dilaksanakan apabila permintaan dihalakan ke titik akhir tertentu.

Kod yang berkaitan datang daripada sumber gin @terkini:

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

Jika anda menyediakan beberapa perisian tengah global, cth. menggunakan router.use, sebelum mengisytiharkan laluan, dan tiada laluan mempunyai perisian tengah untuk setiap laluan, ini menerangkan sebab nombor sentiasa sama.

Sebagai contoh, pertimbangkan perkara berikut:

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

Cetakan:

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

Sebab /foo 的链有 first 中间件和处理程序本身 (2),而 /bar 的链有 firstsecond middleware, ditambah dengan pengendali itu sendiri (3).

Atas ialah kandungan terperinci Apakah maksud output nyahpepijat Go/Gin - (x pengendali). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam