type LoginForm struct { User string `form:"user" binding:"required"` Password string `form:"password" binding:"required"` func Login (c *gin.Context) { var form LoginForm if err := c.ShouldBindJSON(&form); err != nil { c.JSON( 400 , gin.H{ "message" : err.Error()}) return
// 返回数据
    "message": "Key: 'LoginForm.User' Error:Field validation for 'User' failed on the 'required' tag\nKey: 'LoginForm.Password' Error:Field validation for 'Password' failed on the 'required' tag"

定义验证器接口 Validator

package request
import "github.com/go-playground/validator/v10"
// 验证器接口
type Validator interface {
    // 获取验证器自定义错误信息
    GetMessage() ValidatorMessages
// 验证器自定义错误信息字典
type ValidatorMessages map[string]string
// 获取自定义错误信息
func GetErrorMsg(request Validator, err error) string {
    for _, v := range err.(validator.ValidationErrors) {
       if message, exist := request.GetMessages()[v.Field() + "." + v.Tag()]; exist {
           return message
       return v.Error()
    return "Parameter error"

表单结构体 LoginForm 实现验证器接口 Validator

package request
type LoginForm struct {
    User     string `form:"user" binding:"required"`
    Password string `form:"password" binding:"required"`
func (loginForm LoginForm) GetMessages() ValidatorMessages {
    return ValidatorMessages{
        "User.required": "请输入用户名",
        "Password.required": "请输入密码",
func Login(c *gin.Context) {
    var form request.LoginForm
    if err := c.ShouldBindJSON(&form); err != nil {
        c.JSON(400, gin.H{"message": request.GetErrorMsg(form, err)})
        return
// 返回数据
    "message": "请输入用户名"
复制代码
分类:
后端
标签: