"github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "github.com/go-playground/validator/v10" // Booking 包含绑定和验证的数据。 type Booking struct { CheckIn time . Time `form:"check_in" binding:"required,bookabledate" time_format:"2006-01-02"` CheckOut time . Time `form:"check_out" binding:"required,gtfield=CheckIn,bookabledate" time_format:"2006-01-02"` var bookableDate validator . Func = func ( fl validator . FieldLevel ) bool { date , ok := fl . Field ( ) . Interface ( ) . ( time . Time ) if ok { today := time . Now ( ) if today . Year ( ) > date . Year ( ) || today . YearDay ( ) > date . YearDay ( ) { return false return true func main ( ) { route := gin . Default ( ) if v , ok := binding . Validator . Engine ( ) . ( * validator . Validate ) ; ok { v . RegisterValidation ( "bookabledate" , bookableDate ) route . GET ( "/bookable" , getBookable ) route . Run ( ":8080" ) func getBookable ( c * gin . Context ) { var b Booking if err := c . ShouldBindWith ( & b , binding . Query ) ; err == nil { c . JSON ( http . StatusOK , gin . H { "message" : "Booking dates are valid!" } ) } else { c . JSON ( http . StatusBadRequest , gin . H { "error" : err . Error ( ) } )

注: 官方文档中通过 today.After(date) 作为判断依据,该方法不准确,会导致一直为false, 因此可以调整为 today.Year() > date.Year() || today.YearDay() > date.YearDay()

http://127.0.0.1:8080/bookable?check_in=2022-04-01&check_out=2022-04-02
    "message": "Booking dates are valid!"
http://127.0.0.1:8080/bookable?check_in=2022-04-01&check_out=2022-04-01
    "error": "Key: 'Booking.CheckOut' Error:Field validation for 'CheckOut' failed on the 'gtfield' tag"

gin官方文档 自定义验证器
gin-gonic/examples-> Struct level validations
gin自定义验证器转化中文

gin框架29--自定义验证器介绍案例说明介绍本文介绍了如何在gin框架中自定义验证器,并加以案例说明。案例源码:package mainimport ( "net/http" "time" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "github.com/go-playground/validator/v10")// Booking 包含绑定和验证的数据。type Booking struc "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "gopkg.in/go-playground/validator.v8" "net/http" "reflect" "time" //binding 绑定一些验证请求参数,自定义标签bookabledate表示可预约的时期 type Booking struct { CheckIn time.T GinAdmin 辅助工具,提供创建项目、快速生成功能模块的功能 下载并使用 go get -u github.com/gin-admin/gin-admin-cli/v4 USAGE: gin-admin-cli new [command options] [arguments...] OPTIONS: --dir value, -d value 项目生成目录(默认GOPATH) --pkg value, -p value 项目包名 --branch value, -b value 指定分支(默认master) --mirror, -m 使用国内镜像(gitee.com) --web, -w 包含web项目 gin-admin
用于Gin框架的JWT中间件 这是框架的中间件。 它使用提供jwt身份验证中间件。 它提供了其他处理程序功能以提供将生成令牌的login api和可用于刷新令牌的其他refresh处理程序。 简单的HS256 JWT令牌暴力破解程序。 仅对破解机密较弱的JWT令牌有效。 建议:使用强的长期机密或RS256令牌。 请参阅。 使用下载并安装: export GO111MODULE=on go get github.com/appleboy/gin-jwt/v2 将其导入您的代码中: import "github.com/appleboy/gin-jwt/v2" 不使用下载并安装: go get github.com/appleboy/gin-jwt 将其导入您的代码中: import "github.com/appleboy/gin-jwt" 请参阅示例
Go 使用validator进行后端数据校验一、概述二、操作符说明三、常用标记说明四、标记使用注意五、使用示例 包下载:go get github.com/go-playground/validator/v10 在接口开发经常会遇到一个问题是后端需要写大量的繁琐代码进行数据校验,所以就想着有没有像前端校验一样写规则进行匹配校验,然后就发现了validator包,一个比较强大的校验工具包下面是一些学习总结,详细内容可以查看[validator](https://github.com/go-play
使用gin框架开发时,需要对客户端传入的参数进行验证,但是框架自带的错误输出并不是很友好,所以需要我们自己封装,将错误信息转为对前端友好的信息输出 一、定义验证文件 我是新建一个跟main.go文件同级的common文件夹,在文件夹中创建validator.go文件 #需要导入插件 go get github.com/go-playground/universal-translator go get github.com/go-playground/locales package common 通过在验证之前确定它的基础类型来处理类型接口。 处理自定义字段类型,例如 sql 驱动程序 Valuer 请参阅Valuer 别名验证标签,允许将多个验证映射到单个标签,以便更轻松地定义结构上的验证 提取自定义定义的字段名称,例如可以指定在验证时提取 JSON 名称并使其在结果 Fie
景行三千: 博主你好,后端报了个panic: panic: runtime error: invalid memory address or nil pointer dereference 这是因为? kafka笔记4--安装kafka ui 昕光xg: kafka主机的地址 kafka笔记4--安装kafka ui bomi333: 请教一下 192.168.2.11是什么ip地址 是服务器ip吗 Ubuntu小技巧11--Ubuntu 1410 64位安装chrome programmer_ada: 前端的路由实现的核心原理是什么呢?