Golang Go语言中 用过 go-playground/validator 的老哥麻烦进来下

发布于 1周前 作者 itying888 来自 Go语言

Golang Go语言中 用过 go-playground/validator 的老哥麻烦进来下

最近在研究 gin 框架 用到参数验证器 发现真的难用

我在验证传参的时候 只能验证大写的变量

请问:怎样才能验证以小写字母开头的变量

传小写变量:

2019/08/29 17:45:48 [P 为必填字段 N 为必填字段]
[GIN] 2019/08/29 - 17:45:48 | 200 |    1.995798ms |    192.168.5.21 | GET      /v1/api/test/test_users?p=1&n=15

获取不到传入的待验证参数:

2019/08/29 17:45:48 [P 为必填字段 N 为必填字段]

如果传:

注意是大写的 PN 就正常啦 可以通过验证

[GET] /v1/api/test/test_users?P=1&N=15

附上代码:

用了中间件去加载验证器及验证翻译包

import (
    "gin-test/common"
    "github.com/gin-gonic/gin"
    ut "github.com/go-playground/universal-translator"
    "gopkg.in/go-playground/validator.v9"
    "log"
)

type Page struct { P uint json:"p" validate:"required,min=1" N uint json:"n" validate:"required,min=1" }

// GetPage get page parameters func GetPage(c *gin.Context) (int, int) { currentPage := 0

v, _ := c.Get("trans")

trans, ok := v.(ut.Translator)
if !ok {
    trans, _ = common.Uni.GetTranslator("zh")
}

var p Page
if err := c.ShouldBindQuery(&p); err != nil {
   log.Println(err)
}

err := common.Validate.Struct(p)
if err != nil {
   errs := err.(validator.ValidationErrors)
   var sliceErrs [] string
   for _, e := range errs {
       sliceErrs = append(sliceErrs, e.Translate(trans))
   }
   log.Println(sliceErrs)
}

//if page > 0 {
//    currentPage = (page - 1) * limit
//}

return currentPage, 0

}


更多关于Golang Go语言中 用过 go-playground/validator 的老哥麻烦进来下的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

不传大写的人家外面咋调用哇

更多关于Golang Go语言中 用过 go-playground/validator 的老哥麻烦进来下的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你把 p 结构体打出来,看是不是没 bind 上数据,validate 是验证结构体里的数据的

试试 form

go<br>type Page struct {<br> P uint `json:"p" form:"p" validate:"required,min=1"`<br> N uint `json:"n" form:"n" validate:"required,min=1"`<br>}<br>

[https://github.com/gin-gonic/gin#only-bind-query-string]( https://github.com/gin-gonic/gin#only-bind-query-string)

#3
感谢老哥 加上 form:"p" 就能获取到了
看来还要多看文档

关于Go语言中go-playground/validator的使用,以下是一些关键信息和示例:

go-playground/validator是Go语言中的一个非常流行的数据验证库,它提供了丰富的验证功能,并支持通过结构体标签(struct tags)定义验证规则,使得数据验证变得简单而直观。

要使用这个库,首先需要通过go get github.com/go-playground/validator/v10命令进行安装。安装完成后,可以在代码中通过import语句引入该库。

以下是一个简单的使用示例:

package main

import (
    "fmt"
    "github.com/go-playground/validator/v10"
)

type User struct {
    Name  string `validate:"required"`
    Email string `validate:"required,email"`
    Age   int    `validate:"gte=0,lte=130"`
}

func main() {
    validate := validator.New()
    user := &User{Name: "John Doe", Email: "john.doe@example.com", Age: 30}
    err := validate.Struct(user)
    if err != nil {
        fmt.Println("Validation failed:", err)
    } else {
        fmt.Println("Validation passed")
    }
}

此外,go-playground/validator还支持跨字段验证、自定义验证函数、错误消息国际化等高级功能。这些功能可以大大提高数据验证的灵活性和可维护性。如需更多信息,建议查阅官方文档或相关教程。

回到顶部