govalid 是什么?
govalid 是一个小而克制的 Go 结构体校验器。它直接读取你结构体上的 标签,通过反射执行校验——没有代码生成、没有 schema 文件,除了 golang.org/x/text 用于处理 locale 之外没有任何第三方依赖。
go
type RegisterForm struct {
Username string `valid:"required;username;minlen:3;maxlen:20" label:"用户名"`
Email string `valid:"required;email" label:"邮箱"`
Age uint `valid:"required;min:18;max:120" label:"年龄"`
}
errs, ok := govalid.Check(form)设计理念
- 标签即真相。 字段的校验规则写在字段旁边。Code review 时无需 在 handler 之间到处搜,约束一目了然。
- 可组合,不玩魔法。 校验器只是 map 中的普通函数。注册自己的 规则只需要一行代码。没有 DSL 需要学习。
- 安全胜于聪明。 空指针、map、channel、嵌入结构体和未导出字段 都被妥善处理,不会 panic。该库经过百万级 fuzz 测试。
- 国际化优先。 中文与英文模板开箱即用;任意 locale 可插拔。 字段标签本身也支持通过
label-en/label-zh/label-…标签 本地化。
何时选 govalid
govalid 最擅长那些枯燥但占据 80% 时间的校验场景:
- HTTP 请求体与 query 参数
- 启动时的配置文件
- 业务表单(注册、个人资料、地址簿)
- 跨字段约束(确认密码、条件必填)
如果你需要动态、运行时下发的 schema 校验(如 JSON Schema、Protobuf 描述符、动态生成的规则),那应该选别的工具。