首页 >> Golang >> 内容页

【Golang】gin框架中间件的实现代码阅读

中间件的作用

中间件的作用在于,可以对于多个不同的请求,都应用某些同样的代码,做到可以复用代码的用途。例如,登陆、日志等等。

gin的中间件

gin的中间件,在gin里面是一个HandlerFunc,实际上跟路由的处理函数是一样的,一个中间件,即是一个带 *gin.Context 参数的函数。
gin中间件可以处理在路由函数前,也可以处理在路由函数后的事务。主要根据c.Next()在中间件中的调用位置来决定。灵活度很高。

gin的代码实现

读gin的代码(v1.6.3)在run之后,进入到Engine的handleHTTPReqquest之后,就调用c.Next(),包括了正式的处理路由业务的方法,也是从这个 c.Next() 调用,开始执行。

Next的代码

func (c *Context) Next() {
    c.index++
    for c.index < int8(len(c.handlers)) {
        c.handlers[c.index](c)
        c.index++
    }
}

Next会依序执行路由的各个Handler(包括中间件、路由业务方法)。c.index则是当前执行到的Handler标识,而且就是根据这个index,可以保证不会重复执行,并且在中间件里面调用Next之后,会进入到下一个handler,而在执行完之后,又可以依次回到调用的地方。进行后置的处理。
同时,即使在中间件或者路由业务方法里面不调用Next, 亦可以进行到下一个handler的执行。