1. ✅ 监控指标收集 2. ✅ 中间件机制 3. ✅ 配置热更新 4. ✅ 优雅关闭 5. ✅ 插件系统 6. ✅ API文档 7. ✅ 认证授权系统 8. ✅ 请求/响应压缩优化
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
)
|
|
|
|
// Middleware 中间件接口
|
|
type Middleware interface {
|
|
ServeHTTP(http.ResponseWriter, *http.Request, http.HandlerFunc)
|
|
}
|
|
|
|
// Chain 中间件链
|
|
type Chain struct {
|
|
middlewares []Middleware
|
|
}
|
|
|
|
// NewChain 创建新的中间件链
|
|
func NewChain(middlewares ...Middleware) *Chain {
|
|
return &Chain{
|
|
middlewares: middlewares,
|
|
}
|
|
}
|
|
|
|
// Then 将中间件链应用到处理器
|
|
func (c *Chain) Then(h http.Handler) http.Handler {
|
|
if h == nil {
|
|
h = http.DefaultServeMux
|
|
}
|
|
|
|
for i := len(c.middlewares) - 1; i >= 0; i-- {
|
|
h = c.wrap(h, c.middlewares[i])
|
|
}
|
|
|
|
return h
|
|
}
|
|
|
|
// wrap 包装处理器
|
|
func (c *Chain) wrap(h http.Handler, m Middleware) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
m.ServeHTTP(w, r, h.ServeHTTP)
|
|
})
|
|
}
|
|
|
|
// Add 添加中间件
|
|
func (c *Chain) Add(middlewares ...Middleware) *Chain {
|
|
c.middlewares = append(c.middlewares, middlewares...)
|
|
return c
|
|
}
|
|
|
|
// Remove 移除中间件
|
|
func (c *Chain) Remove(index int) *Chain {
|
|
if index < 0 || index >= len(c.middlewares) {
|
|
return c
|
|
}
|
|
c.middlewares = append(c.middlewares[:index], c.middlewares[index+1:]...)
|
|
return c
|
|
}
|
|
|
|
// Clear 清空中间件链
|
|
func (c *Chain) Clear() *Chain {
|
|
c.middlewares = nil
|
|
return c
|
|
}
|