我try 使用Golang验证器包

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

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

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())
}

我会得到字段名,比如"Email"或"Password".我希望返回的是该字段的另一个名称,例如,"Email"变成"Email Address",或者"Password"变成"Secret".

有没有办法做到这一点?谢谢你..

推荐答案

您可以使用(*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())
            }
        }
    }
}

Go相关问答推荐

在GO中创建[]字符串类型的变量

无法在32位计算机上运行Golang应用程序

从使用Golang otelmux检测的Otel跟踪中获取trace_id

Makefilego version和read命令

如果第一次匹配条件,如何跳过切片中的值

如何模拟 stripe 需要 webhooks 的捕获事件?

Golang Fiber Render - 将数据发送到多个布局

Go - 永远停止带有上下文的循环

Go test "-run -" 标志执行测试更快

gopacket:IP-in-IP 数据包上的解码层

golang:解组动态 YAML 注释

自定义 Fyne 自适应网格布局

Apache Beam 左加入 Go

如何在切片增长时自动将切片的新元素添加到函数参数

如何仅提取时间作为持续时间

Golang计算 struct struct 中的字段数

Golang Getrlimit 返回与 ulimit 不同的值

是否可以使用按位运算在随机 unicode 字符串中找到重复字符?

Go 使用 struct 作为接口而不实现所有方法

在 Go 中将十六进制转换为带符号的 Int