validator是一个开源的验证器包,可以快速校验输入信息是否符合自定规则。源码地址: https://github.com/go-playground/validator
本地开发安装库:
go get github.com/go-playground/validator
例如我们使用golang的gin框架进行web server的开发,对于传来的json参数进行校验,这个是必不可少的,只要是传过来的参数,就不可信。
话不多说,直接上代码示例:
package main import ( "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" "net/http" ) type User struct { Username string `json:"username" validate:"required,min=4,max=20"` // 必填字段,限制长度 Password string `json:"password" validate:"required"` // 必填字段 Email string `json:"email" validate:"required,email"` // 限于email格式 Phone string `json:"phone" validate:"omitempty,numeric"` // 限于数字型 Hobby []string `json:"hobby" validate:"omitempty"` // 空时忽略 Age int `json:"age" validate:"omitempty,gt=18,lt=100"` // 限制大小 Gender string `json:"gender" validate:"omitempty,oneof=male female"` // 限于男女 } func main() { router := gin.Default() router.POST("/login", login) _ = router.Run(":8080") } func login(ctx *gin.Context) { var user User err := ctx.ShouldBindJSON(&user) if err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{"msg": err.Error()}) return } // repeat parse use below //_ = ctx.ShouldBindWith(&user, binding.JSON) validate := validator.New() err = validate.Struct(user) if err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{"msg": err.Error()}) return } ctx.JSON(http.StatusOK, gin.H{"msg": "success"}) }
启动server,postman测试,可以看到哪些字段因为某个校验不能通过校验,导致error, 是不是很友好呢,不过建议返回前台校验参数失败即可,具体校验详情作为日志输出到server的log文件中。
参考文档