Skip to content

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 描述符、动态生成的规则),那应该选别的工具。

接下来读什么

基于 MIT 协议发布。