go validator验证结构体零值问题
- 在使用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