【每日一库】Web 表单验证利器:go-playground/validator

polaris · · 5799 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

这是一个 Go 结构体及字段校验器,包括:跨字段和跨结构体校验,Map,切片和数组,是目前校验器相关库中 Star 数最高的一个,对国际化支持也很好,建议大家使用它。 它具有以下独特功能: - 通过使用验证标签(tag)或自定义验证程序进行跨字段和跨结构体验证; - 切片,数组和 map,可以验证任何的多维字段或多层级; - 能够深入(多维)了解 map 键和值以进行验证; - 通过在验证之前确定其基础类型来处理接口类型; - 处理自定义字段类型,例如 sql driver Valuer; - 别名验证标签,允许将多个验证映射到单个标签,以便更轻松地定义结构上的验证; - 提取自定义定义的字段名称,例如可以指定在验证时提取 JSON 名称,并将其用于结果 FieldError 中; - 可自定义的 i18n 错误消息; - gin Web 框架的默认验证器; 项目地址:<https://github.com/go-playground/validator>,目前 Star 数 4.8k。 ## 安装 目前最新版本是 v10,建议使用最新版本: ```bash $ go get github.com/go-playground/validator/v10 ``` 在你的代码中使用: ```go import "github.com/go-playground/validator/v10" ``` ## 一个简单的例子 通过一个简单例子来看看如何使用该库。 ```go package main import ( "fmt" "flag" "github.com/go-playground/validator/v10" ) type User struct { Name string `validate:"required"` Age uint `validate:"gte=1,lte=130"` Email string `validate:"required,email"` } var ( name string age uint email string ) func init() { flag.StringVar(&name, "name", "", "输入名字") flag.UintVar(&age, "age", 0, "输入年龄") flag.StringVar(&email, "email", "", "输入邮箱") } func main() { flag.Parse() user := &User{ Name: name, Age: age, Email: email, } validate := validator.New() err := validate.Struct(user) if err != nil { fmt.Println(err) } } ``` 执行如下命令,运行代码: ``` go run main.go -name studygolang -age 7 -email polaris@studygolang.com ``` 什么都没有输出,表示一切正常。如果我们提供一个非法的邮箱地址: ``` go run main.go -name studygolang -age 7 -email polaris<a href="/user/studygolang" title="@studygolang">@studygolang</a> ``` 输出如下错误: ``` Key: 'User.Email' Error:Field validation for 'Email' failed on the 'email' tag ``` ## 小结 Gin 框架默认集成了该库;Echo 框架提供了 Validator 接口,可以很容易的继承该库。大家进行 Web 开发推荐使用。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5799 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传