🏷️
标签驱动,零配置
在结构体字段旁直接声明校验规则。没有 builder,没有 schema 文件——你的结构体就是 schema。
package main
import (
"fmt"
"github.com/wuhan005/govalid"
)
func main() {
v := struct {
Name string `valid:"required;username" label:"昵称"`
ID int `valid:"required;min:0;max:999" label:"用户编号"`
Mail string `valid:"required;email" label:"邮箱"`
}{
Name: "e99_",
ID: 1990,
Mail: "i@github.red.",
}
if errs, ok := govalid.Check(v); !ok {
for _, err := range errs {
fmt.Println(err)
}
}
}昵称的最后一个字符不能为下划线
用户编号应小于999
邮箱不是合法的电子邮箱格式| govalid | 自己写 if | |
|---|---|---|
| 规则在哪里 | 字段旁的结构体标签 | 散落在各个 handler 中 |
| 跨字段规则 | equal: 校验器 + Validate() | 手写条件判断 |
| 本地化错误 | 内置 i18n + SetMessageTemplates | 自己造轮子 |
| 自定义规则 | Checkers["myRule"] = … | 复制粘贴函数 |
| 怪异输入安全性 | 自动处理 nil/map/嵌入/未导出 | 全靠你 |