Files
go-common/middleware/chain.go

37 lines
828 B
Go

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
}