go gin 必须使用 dive 标记,它告诉 required 校验 深入到 slice、array 这样的子结构体里

package main

import (
"fmt"
"net/http"

"github.com/gin-gonic/gin"
)

type user struct {
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
}

type data struct {
User []user `json:"user" binding:"required,dive"` // use dive tag
}

//GetDataTest will get test data
func GetDataTest(c *gin.Context) {
var data data
err := c.Bind(&data)
if err == nil {
fmt.Printf("%+v", data)
c.JSON(http.StatusOK, gin.H{
"message": "done",
})
} else {
c.JSON(http.StatusBadRequest, gin.H{
"message": err.Error(),
})
}
}



func main(){

route := gin.Default()
route.POST("/", GetDataTest)
route.Run(":8080")
}

 gin框架中集成了github.com/go-playground/validator进行参数校验,我们只需要在定义结构体是使用bindingtag标识相关校验规则,更多详尽的使用参照validator github文档

 

validator是Goland里常用的表单校验工具。表单校验的作用就是对输入的数据进行合法判断,如果不合法,那没就会输出错误。

1. go web应用中,我们使用 struct tag 来定义表单合法的值
在web开发中一个不可避免的环节就是对请求参数进行校验,通常我们会定义一个DTO(数据模型)结构体来接收请求的参数。借助波形绑定跨界的解析请求中的参数。

gin框架中集成了github.com/go-playground/validator进行参数校验,我们只需要在定义结构体是使用bindingtag标识相关校验规则,更多详尽的使用参照validator github文档。

如果有多个校验条件,可以用,(英文逗号),他们是 AND 的关系
如果想要 OR 的关系,那么使用 |。

2. 基本使用
type SignParam struct {
Age uint8 `json:"age" binding:"gte=1,lte=120"` // 年龄要大于等于1,且小于等于120
Name string `json:"name" binding:"required"` // 名字字段不能为空
Email string `json:"email" binding:"required,email"` // 邮箱不能为空,且匹配邮箱格式是否正确
Password string `json:"password" binding:"required"` // 密码不能为空
RePassword string `json:"re_password" binding:"required,eqfield=Password"` // 确认密码不能为空,且确认密码要与密码相同
}

注: 当你binding该字段设置required后,当你传入该类型的零值时会出错,validator并不认为你传入了值。
————————————————
版权声明:本文为CSDN博主「Lindbergh_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Lin_Bolun/article/details/113172612

https://blog.csdn.net/private66/article/details/82424743

posted @   技术颜良  阅读(222)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2021-01-21 每天学一个 Linux 命令(24):chattr/lsattr
点击右上角即可分享
微信分享提示