通过层层包装为请求处理添加横切关注点。
需要在请求处理前后执行通用逻辑,如日志、认证、限流。
定义中间件函数签名,链式组合处理器。
1type Handler func(ctx context.Context, req *Request) (*Response, error)2 3type Middleware func(Handler) Handler4 5// 日志中间件6func LoggingMiddleware(next Handler) Handler {7 return func(ctx context.Context, req *Request) (*Response, error) {8 start := time.Now()9 resp, err := next(ctx, req)10 log.Printf("method=%s duration=%v err=%v", req.Method, time.Since(start), err)11 return resp, err12 }13}14 15// 认证中间件16func AuthMiddleware(next Handler) Handler {17 return func(ctx context.Context, req *Request) (*Response, error) {18 if !verifySignature(req) {19 return nil, ErrUnauthorized20 }21 return next(ctx, req)22 }23}24 25// 组合中间件26func Chain(h Handler, middlewares ...Middleware) Handler {27 for i := len(middlewares) - 1; i >= 0; i-- {28 h = middlewares[i](h)29 }30 return h31}32 33// 使用34handler := Chain(businessHandler,35 LoggingMiddleware,36 AuthMiddleware,37 RateLimitMiddleware,38)API 网关的请求处理链,包含签名验证、Gas 估算、Nonce 管理。