背景

我们在开发接口时会写大量的interface Service,但是有时候需要提供一个功能对已经写好的接口提供一个中间件进行业务处理

我们已经写好的接口

  1. type Service interface {
  2. Add(a, b int) int
  3. }
  4. type baseServer struct{}
  5. func NewBaseServer() Service {
  6. return baseServer{}
  7. }
  8. func (s baseServer) Add(a, b int) int {
  9. return a + b
  10. }

添加中间件1

  1. type logServer struct {
  2. next Service
  3. log string
  4. }
  5. func LogMiddleware(name string) ServiceMiddleware {
  6. return func(next Service) Service {
  7. return logServer{
  8. next: next,
  9. log: "日志中间件V1",
  10. }
  11. }
  12. }

添加中间件2

  1. type logV2Server struct {
  2. next Service
  3. log string
  4. }
  5. func LogV2Middleware(name string) ServiceMiddleware {
  6. return func(next Service) Service {
  7. return logV2Server{
  8. next: next,
  9. log: "日志中间件V2",
  10. }
  11. }
  12. }

结果

  1. svc := NewService("")
  2. fmt.Println("结果", svc.Add(1, 2))
  3. 开始运行
  4. log 日志中间件V1 a > 1 b > 2 res > 3 time 196ns
  5. log 日志中间件V2 a > 1 b > 2 res > 3 time 12.223µs
  6. 结果 3

完整演示代码 点击这里

联系 QQ: 33551682