我们在处理我们的业务逻辑的时候,
一般前端传过来的信息,后端代码一定是抱着 所有信息都不信任的态度,
所有的输入信息我们都需要进行校验,
我们在代码实践的过程中,用的xml写的idl进行数据的校验,校验的工具采用的是 go-playground的validator
什么是validator呢?
在web应用中经常会遇到数据验证问题,普通的验证方法比较繁琐,这里介绍一个使用比较多的包validator
It has the following unique features:
。。。
这里不详细的展开,
下面来一个使用示例:
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type Users struct {
Phone string `form:"phone" json:"phone" validate:"required"`
Passwd string `form:"passwd" json:"passwd" validate:"required,max=20,min=6"`
}
func main() {
users := &Users{
Phone: "1326654487",
Passwd: "123",
}
validate := validator.New()
err := validate.Struct(users)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
fmt.Println(err)//Key: 'Users.Passwd' Error:Field validation for 'Passwd' failed on the 'min' tag
return
}
}
return
}
使用起来也比较简单。
今天也遇到了一个字符编码的问题,代码如下:
type UpdateRequest struct {
// id
Id int64 `json:"Id" form:"Id" binding:"required,gte=1,lte=9223372036854775807"`
// 媒体名称
Name string `json:"Name" form:"Name" validate:"required,omitempty,gte=1,lte=8"
数据库中,定义了Name长度为32,代码中校验name长度为8,现在想放开8个汉字,
因为 数据库中,定义了Name长度为32 ,所以,这个不需要调整,这是由MySQL的特性决定的,
来调整一下代码:
type UpdateRequest struct {
// id
Id int64 `json:"Id" form:"Id" binding:"required,gte=1,lte=9223372036854775807"`
// 媒体名称
Name string `json:"Name" form:"Name" validate:"required,omitempty,gte=1,lte=32"
发现居然也能通过,最后通过查看源码
原来 validator 中在进行字符串校验的时候,采用的是 tune ,一个汉字,也是一个字符,这里是需要大家注意的,
不过 validator 还是很人性的,我们就是需要这样的校验。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。