当前位置: 首页 > article >正文

go~大型项目的参数注册

目标对象

如何合理的注册 Config.Process 中的 Middleware ?

// 目标对象
type Config struct {
	Process struct {
		Middleware []CommonMiddleware
	}
}

type CommonMiddleware interface {
	PreProcess(ctx *context.Context, event *ProcessEvent) error
	PostProcess(ctx *context.Context, err *error, event *ProcessEvent) error
}

SDK实现

提供 Init 函数

// 定义一个函数类型,后续要用该类型填充 Config
type CfgOption func(*Config)

func Init(name string, ops ...CfgOption) {
	c := &Config{}
	c.name = name
	c.Producer.Middleware = []CommonMiddleware{}
	for _, op := range ops {
		op(c)
	}
	return c, nil
}

业务代码

定制注册

// 业务实现
type myMW struct{}

func (m *myMW) PreProcess(*context.Context, *ProcessEvent) error          { return nil }
func (m *myMW) PostProcess(*context.Context, *error, *ProcessEvent) error { return nil }


// 注册
var processMWCfg = WithProcessMiddleware(&myMW{})

func WithProcessMiddleware(m CommonMiddleware) CfgOption {
	return func(config *Config) {
		config.Producer.Middleware = append(config.Producer.Middleware, m)
	}
}

func WithProcessMW() CfgOption {
	return processMWCfg
}

Init("123", WithProcessMW())

默认注册

type noOP struct{}

func (m *noOP) PreProcess(*context.Context, *ProcessEvent) error          { return nil }
func (m *noOP) PostProcess(*context.Context, *error, *ProcessEvent) error { return nil }

type myMW struct{
	noOP
	addr string
	email string
}

http://www.kler.cn/a/587121.html

相关文章:

  • [local-file-system]基于服务器磁盘的本地文件存储方案
  • CentOS 系统安装 docker 以及常用插件
  • Elasticsearch分页查询、关键词高亮与性能优化全解析
  • 国产芯片替代方案:解析沁恒以太网控制器芯片,内置MAC地址
  • 【MySQL】undo日志类型
  • CSS3学习教程,从入门到精通,CSS3 选择器权重问题语法知识点及案例代码(5)
  • Freertos--把队列加入队列集
  • 使用tiptap快速搭建markdown-富文本编辑器
  • 电路基础【2】:三极管基础:PNP与NPN三极管详解
  • FPGA 中 assign 和 always 区别
  • 2.4滑动窗口专题:将 x 减到 0 的最小操作数
  • 均方误差(MSE)与最小二乘法(LS)的区别
  • 数字孪生像魔镜,映照出无限可能的未来
  • 二进制数(十进制转二进制)
  • 标定棋盘格大小的选择
  • 车载Android音频系统 CarAudioService
  • React 常用 Hooks 详细解析
  • 保持docker内容器一直运行
  • ChatGPT客户端无法在微软应用商店下载的解决方法
  • 生态安全的范式