永远不要相信用户的输入的值,这些输入的参数值如果不验证它,否则会带来可怕的后果:可能P0事故,可能提桶跑路,可能丢失饭碗,可能南方的阳光照着北方的风,~~~跑题了。
一、 背景
正常来说我们写接口的时候,客户端传递过来的表单数据,我们都必须要校验的,所以我们的业务代码里会有很多的if else 来验证参数。可能真正处理业务的代码没几行,if else 却占据了一大半!真是西红柿炒鸡蛋-》操蛋🥚。那么有没有一款好用的验证请求参数的库,配置一下就能验证客户端安传递过来的参数呢?有的我推荐一个用 GO 开发的验证请求参数的库:是它是它就是它,它的名字叫validator
二、安装
go get -u github.com/go-playground/validator/v10
三、使用
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type User struct {
UserName string `json:"user_name" validate:"required"`
Password string `json:"password" validate:"required,min=6,max=20"`
}
func main() {
example := User{
Password: "666666",
}
//实例化验证器
validate := validator.New()
errs := validate.Struct(example)
if errs != nil {
for _, err := range errs.(validator.ValidationErrors) {
fmt.Println("错误:",err)
}
}
}
运行上面代码,然后输出
错误 Key: ‘User.UserName’ Error:Field validation for ‘UserName’ failed on the ‘required’ tag
你会发现提示是英文的,那对我这种英语过八级的人来说不是很友好,fuck!
不过不要紧,如果需要翻译成中文则还需安装验证提示翻译包:
go get -u github.com/go-playground/locales
go get -u github.com/go-playground/universal-translator
开始使用它:
package main
import (
"fmt"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zh_translations "github.com/go-playground/validator/v10/translations/zh"
)
type User struct {
UserName string `json:"user_name" validate:"required"`
Password string `json:"password" validate:"required,min=6,max=20"`
}
func main() {
example := User{
Password: "123",
}
// 中文翻译器
uni := ut.New(zh.New())
trans, _ := uni.GetTranslator("zh")
//实例化验证器
validate := validator.New()
// 注册翻译器到校验器
err := zh_translations.RegisterDefaultTranslations(validate, trans)
if err!=nil {
fmt.Println(err)
return
}
errs := validate.Struct(example)
if errs != nil {
for _, err := range errs.(validator.ValidationErrors) {
fmt.Println(err.Translate(trans))
}
}
}
运行代码输出:
UserName为必填字段
Password长度必须至少为6个字符
怎么样,还是可以的哈哈哈哈哈哈 参数处理验证完之后,后面就可以安心的处理业务逻辑了