ZBLOG

validator 提示错误信息时,使用指定的tag作为字段名

在 Go 语言的 validator 库中,默认情况下,错误消息中会使用字段名作为提示信息的一部分。但是,如果你想使用指定的 tag 作为字段名,在错误提示中显示更具体的信息,你可以通过实现 TranslateFunc 接口来自定义错误消息。

下面是一个示例代码,展示了如何自定义错误消息并使用指定的 tag 作为字段名:

package main

import (
	"fmt"

	"github.com/go-playground/locales/en"
	"github.com/go-playground/validator/v10"
	ut "github.com/go-playground/universal-translator"
	en_translations "github.com/go-playground/validator/v10/translations/en"
)

type User struct {
	Name     string `validate:"required" label:"Full Name"`
	Email    string `validate:"required,email" label:"Email Address"`
	Password string `validate:"required,min=8,max=20" label:"Password"`
}

func main() {
	user := User{Name: "", Email: "invalid-email", Password: "123"}

	validate := validator.New()

	trans := en.New()
	uni := ut.New(trans, trans)
	trans, _ = uni.GetTranslator("en")

	err := en_translations.RegisterDefaultTranslations(validate, trans)
	if err != nil {
		fmt.Println("无法注册默认翻译:", err)
		return
	}

	err = validate.Struct(user)
	if err != nil {
		for _, err := range err.(validator.ValidationErrors) {
			fieldName := err.Field()
			labelTag := fmt.Sprintf("%s.label", fieldName)
			label, _ := trans.Translate(labelTag, "")
			
			fmt.Printf("%s 验证失败: %s\n", label, err.Tag())
			fmt.Println("错误消息:", err.Translate(trans))
			fmt.Println()
		}
	}
}

在上述示例代码中,我们首先定义了一个 User 结构体,并为其每个字段添加了验证规则和标签。标签使用了自定义的 label 标记。

然后,我们创建了一个 validator 实例,并且注册了英文的翻译器(translator)。接着,通过调用 RegisterDefaultTranslations 方法,将默认的翻译器与 validator 关联起来。

最后,在验证失败时,我们获取到对应字段的 label 标签,并通过翻译器将其转换为对应语言的字段名。这样,在打印错误提示信息时,就可以使用指定的 tag 作为字段名。

通过自定义错误消息的方式,你可以更加灵活地控制验证失败时的提示信息,并使用指定的 tag 或其他自定义内容作为字段名显示。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14474

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?