首页 > 文章列表 > Golang 验证器包带有错误重命名字段

Golang 验证器包带有错误重命名字段

245 2024-02-18
问题内容

我尝试使用golang验证器包

https://pkg.go.dev/github.com/go-playground/validator/v10

有没有办法屏蔽返回错误的字段?下面的示例,假设我有一个如下所示的结构,用于执行结构验证

type signinuserdata struct {
  email    string `json:"email" validate:"required"`
  password string `json:"password" validate:"required"`
}

如果我的错误是这样映射的:

validationErrors := err.(validator.ValidationErrors)

for _, fieldError := range validationErrors {
  fmt.println(fieldError.Field())
}

我得到字段名称,例如“电子邮件”或“密码”。我希望返回的是字段的其他名称,例如 “电子邮件” 变为 “电子邮件地址”,或 “密码” 变为“秘密”

有办法吗?谢谢..


正确答案


您可以使用 (*validate).registertagnamefunc 注册一个函数来获取 structfields 的备用名称。

例如,注册一个函数以从 name 标签获取备用名称:

package main

import (
    "fmt"
    "reflect"

    "github.com/go-playground/validator/v10"
)

type SignInUserData struct {
    Email    string `json:"email" validate:"required" name:"Email Address"`
    Password string `json:"password" validate:"required" name:"Secret"`
}

func main() {
    validate := validator.New()
    validate.RegisterTagNameFunc(func(field reflect.StructField) string {
        return field.Tag.Get("name")
    })

    data := &SignInUserData{}

    err := validate.Struct(data)
    if err != nil {
        validationErrors, ok := err.(validator.ValidationErrors)
        if ok {
            for _, fieldError := range validationErrors {
                fmt.Println(fieldError.Field())
            }
        }
    }
}