前言
我有一个 User 结构体,我想验证里面的 email 字段存储的是不是邮箱,于是想用 govalidator 来实现这一功能,可是不管我输入什么,govalidator 都返回 true。
问题描述
完整代码如下所示:
package main
import (
"fmt"
"github.com/asaskevich/govalidator"
)
type User struct {
email string `valid:"email,required"`
}
func main() {
user := &User{email: "test valid"}
ans, err := govalidator.ValidateStruct(user)
fmt.Println(ans)
if err != nil {
fmt.Println(err.Error())
}
}
运行上面的代码,输出如下:
$ go run test.go
true
字符串 “test valid” 很明显不是一个 email,那为什么验证没起效果呢?
这是因为 User 结构体中有一个和 email 规则同名的 email 字段导致出现了冲突,将字段名改一下就好了。
问题解决
type User struct {
Email string `valid:"email,required"`
}
此时再运行代码,输出如下:
$ go run test.go
false
Email: test valid does not validate as email
可以看到验证规则起作用了。