Golang Go语言中 Gin 启动之后, 路由后面的 Handlers 数量是什么意思
Golang Go语言中 Gin 启动之后, 路由后面的 Handlers 数量是什么意思
Handler 一直都是 4
大佬们好,用 Gin 以来一直有个问题,每次等到项目启动之后,每一条路由后面都有一个 (数量 Handlers )的显示,并且数量是 4, 如下图:
Handler 变成 1
问题发生于昨天,没想到这个项目越来越大,导致路由太多,就参照网上一个人的文章,把路由拆分了。 没想到,拆分后,所有的 Handlers 都变成了 1,如下图:
想问一下各位大佬,这样的话,会不会对我的项目性能产生影响~~~
顺便奉劝大家,不要随便相信网上的文章 T_T
拆分方式
拆分路由器的方式,如下图:
更多关于Golang Go语言中 Gin 启动之后, 路由后面的 Handlers 数量是什么意思的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
应该是你的中间件数量+你的业务处理函数(1)
也就是 RouterGroup 这个结构体的 Handlers 参数
可以看看 gin 所使用的 httprouter
更多关于Golang Go语言中 Gin 启动之后, 路由后面的 Handlers 数量是什么意思的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
中间件一直都只有 1 个呢,拆分之前是 4,拆分后就变成 1 了,请问这个从 4 变成了 1,对性能有影响嘛?
显示这个部分在 debugPrintRoute 函数<br>func debugPrintRoute( httpMethod, absolutePath string, handlers HandlersChain) {<br> if IsDebugging() {<br> nuHandlers := len(handlers)<br> for _, h := range handlers{ //<br> debugPrint(" %s", nameOfFunction(h)) //这两行是我加的。看一下是啥就知道这 4 个是什么 handler 了。<br> }<br> handlerName := nameOfFunction(handlers.Last())<br> if DebugPrintRouteFunc == nil {<br> debugPrint("%-6s %-25s --> %s (%d handlers)\n", httpMethod, absolutePath, handlerName, nuHandlers)<br> } else {<br> DebugPrintRouteFunc( httpMethod, absolutePath, handlerName, nuHandlers)<br> }<br> }<br>}<br>
我这里除去那个业务逻辑函数外,剩下的 3 个 handler 是
github.com/gin-gonic/gin.LoggerWithConfig.func1
github.com/gin-gonic/gin.RecoveryWithWriter.func1
github.com/gin-contrib/cors.New.func1
真大佬!疑惑解决了~ 非常感谢
在Golang的Gin框架中,当你启动一个Gin服务器并定义了多个路由及其对应的处理函数(Handlers)时,路由后面的Handlers数量实际上指的是为该路由绑定的中间件(Middleware)和处理函数的总数。
Gin框架的设计非常灵活,它允许开发者为特定的路由绑定多个中间件,这些中间件在处理请求的过程中会按照添加的顺序依次执行。中间件可以用于执行诸如身份验证、日志记录、请求数据校验等操作。每个路由最终的处理函数(即实际处理请求的逻辑)也会被视为一个特殊的中间件,只不过它通常是处理请求链的最后一个环节。
因此,当你看到路由后面的Handlers数量时,这个数字实际上反映了该路由在处理请求时需要经过的所有中间件(包括最终的处理函数)的总数。这个数字对于理解和调试Gin应用的请求处理流程非常有帮助。
例如,如果你为一个路由绑定了两个中间件和一个最终的处理函数,那么该路由的Handlers数量就会是3。这意味着当请求到达这个路由时,它会依次经过这两个中间件和最终的处理函数,每个中间件都有机会对请求进行干预或修改。
总的来说,Gin框架中的Handlers数量是一个有用的指标,它可以帮助开发者更好地理解和控制应用的请求处理流程。