用途:按 GO 模块化架构约定生成 Go 校验器实现,遵循接口优先设计、Fx 依赖注入与无状态校验。
主要能力:每个校验器采用两文件模式——端口接口位于 internal/modules/<module>/ports/<validator_name>_validator.go,实现位于 internal/modules/<module>/validator/<validator_name>_validator.go。实现文件按固定顺序组织:包导入、常量、结构体定义、接口断言 var _ ports.XxxValidator = (*XxxValidator)(nil)、构造函数 NewXxxValidator、校验方法。支持无状态校验器、带依赖的有状态校验器(如注入 ports.UserRepository)以及多字段校验器。
使用方式:先创建端口接口,再创建实现,定义包级校验常量;如需新增自定义错误,加入模块 errs/errs.go,并在 locales/en.json 及所有其他现有语言文件中补充翻译键;编写单元测试于 validator/<name>_validator_test.go;在模块 fx.go 中用 fx.Provide(fx.Annotate(validator.NewPasswordValidator, fx.As(new(ports.PasswordValidator)))) 注册;最后运行 make test、make lint、make nilaway。
适用场景:需要按统一约定新增或重构 Go 校验逻辑、统一错误类型与多语言翻译、保证测试覆盖的模块化项目。
限制:校验器仅依赖接口;默认无状态,仅在需要外部数据时注入依赖;执行 I/O 的校验器必须将 context.Context 作为第一个参数;必须返回模块 errs 包中的类型化领域错误;新增自定义错误必须同步所有语言文件;实现方法上不加冗余注释,接口需写详细注释;构造函数必须返回指针;需覆盖有效输入、各无效条件与边界情况。具体命令与目录以项目实际为准。