go validator验证结构体零值问题

发布时间 2023-08-08 18:42:31作者: 高小孬
  • 在使用gin框架验证前端参数时,由于golang特性,对于结构体没赋值的字段会赋予零值(int默认0,string默认""等)
  • 所以当想要验证的字段时非必填字段时,不设置required,其他的验证条件依然不能通过
  • 解决方法是在非必填字段上添加omitempty
package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

type Register struct {
	Email string `json:"email,omitempty" binding:"omitempty,email"`
}
/*
type Register struct {
	Email string `json:"email,omitempty" binding:"email"`
}
*/
func main() {
	r := gin.Default()

	r.POST("ping", func(c *gin.Context) {
		register := &Register{}
		err := c.BindJSON(register)
		if err != nil {
			c.JSON(http.StatusOK, gin.H{
				"msg": err.Error(),
			})
			return
		}
	})
	r.Run(":8080")
}

以上,binding中无omitempty时,请求json参数中没有email字段会报错

参考链接:https://segmentfault.com/q/1010000018561478