中间件机制

    tango的中间件只需要符合以下接口即可。

    同时,tango也提供了,以方便你将一个函数包装为中间件。比如:

    1. func MyHandler() tango.HandlerFunc {
    2. return func(ctx *tango.Context) {
    3. fmt.Println("this is my first tango handler")
    4. ctx.Next()
    5. }
    6. }
    7. t.Use(MyHandler())
    8. t.Run()

    当然,你可以直接将一个包含tango.Context指针的函数作为中间件,如:

    1. tg.Use(func(ctx *tango.Context){
    2. fmt.Println("before")
    3. ctx.Next()
    4. fmt.Println("after")

    为了和标准库兼容,tango通过UseHandler支持http.Handler作为中间件,如:

    Call stack

    以下是中间件的调用顺序图:

    1. |--Handler1
    2. |--Handler2
    3. |-- ...HandlerN
    4. |---Action(If matched)
    5. ...HandlerN--|
    6. Handler2 ----|

    在中间件中,您的中间件代码可以在Next()被调用之前或之后执行,Next表示执行下一个中间件或Action被执行(如果url匹配的话)。如果不调用Next,那么当前请求将会被立即停止,之后的所有代码将不会被执行。