1 回复
更多关于Golang数据验证库govalidator v1.9.3版本发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在govalidator v1.9.3版本中,修复了一些关键的验证规则问题,这对于确保数据验证的准确性和可靠性非常重要。以下是一个示例,展示如何使用该版本进行基本的数据验证:
package main
import (
"fmt"
"log"
"github.com/thedevsaddam/govalidator"
)
type User struct {
Name string `json:"name"`
Email string `json:"email"`
Age int `json:"age"`
}
func main() {
rules := govalidator.MapData{
"name": []string{"required", "min:3", "max:50"},
"email": []string{"required", "email"},
"age": []string{"required", "numeric", "min:18", "max:99"},
}
messages := govalidator.MapData{
"name": []string{"required:姓名不能为空", "min:姓名至少3个字符", "max:姓名最多50个字符"},
"email": []string{"required:邮箱不能为空", "email:邮箱格式不正确"},
"age": []string{"required:年龄不能为空", "numeric:年龄必须是数字",
"min:年龄必须大于等于18岁", "max:年龄必须小于等于99岁"},
}
opts := govalidator.Options{
Data: &User{
Name: "张三",
Email: "zhangsan@example.com",
Age: 25,
},
Rules: rules,
Messages: messages,
}
v := govalidator.New(opts)
err := v.ValidateStruct()
if err != nil {
log.Fatal(err)
}
fmt.Println("数据验证通过")
}
该版本修复了之前在某些边界条件下验证规则可能失效的问题,特别是在处理Unicode字符长度验证和特定格式的邮箱验证时。例如,之前版本在处理包含emoji的用户名时可能出现长度计算错误,v1.9.3已修复此问题。
对于表单数据验证:
func validateForm() {
data := map[string]interface{}{
"username": "user123",
"password": "secret123",
"phone": "+8613812345678",
}
rules := govalidator.MapData{
"username": []string{"required", "alpha_num", "min:5", "max:20"},
"password": []string{"required", "min:8"},
"phone": []string{"required", "phone"},
}
v := govalidator.New(govalidator.Options{
Data: data,
Rules: rules,
})
if err := v.Validate(); len(err) > 0 {
for field, errors := range err {
fmt.Printf("%s: %v\n", field, errors)
}
} else {
fmt.Println("表单验证通过")
}
}
这些修复确保了验证规则在各种场景下的正确执行,提升了库的稳定性和可靠性。

