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进行参数校验,我们只需要在定义结构体是使用binding
tag标识相关校验规则,更多详尽的使用参照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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2021-01-21 每天学一个 Linux 命令(24):chattr/lsattr