37 lines
828 B
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
|
|
}
|
|
|