package middleware import "net/http" // Chain 中间件链 type Chain struct { middlewares []func(http.Handler) http.Handler } // NewChain 创建新的中间件链 func NewChain(middlewares ...func(http.Handler) http.Handler) *Chain { return &Chain{ middlewares: middlewares, } } // Then 将中间件链应用到处理器 func (c *Chain) Then(handler http.Handler) http.Handler { final := handler for i := len(c.middlewares) - 1; i >= 0; i-- { final = c.middlewares[i](final) } return final } // ThenFunc 将中间件链应用到处理器函数 func (c *Chain) ThenFunc(handler http.HandlerFunc) http.Handler { return c.Then(handler) } // Append 追加中间件 func (c *Chain) Append(middlewares ...func(http.Handler) http.Handler) *Chain { c.middlewares = append(c.middlewares, middlewares...) return c }