作为标题,因为我是Golang的新手,所以我对一些定制格式的绑定标签感到有点困惑.

例如, 有一个 struct ,其中有几个这样的字段

type user struct {
   name  `json:"name" binding:"required"`
   hobby `json:"name" binding:"required"`
}

名称字段应该只支持小写和下划线(例如John_Cage、David) 但在我看了验证器的文档后,仍然对此一无所知. validator github个 对我的情况有什么好的建议或解决办法吗?先谢谢你.

阅读文档,谷歌类似的问题,try compose 客户绑定标签等.

推荐答案

binding标记来自gin,validator的正确 struct 标记是validate.既然蛇壳没有现货,你就自己做吧.并且不要忘记导出字段(HobbyName).如果不这样做,(例如:hobby,name)验证器将忽略这些字段.

package main

import (
    "fmt"
    "strings"

    "github.com/go-playground/validator/v10"
)

type user struct {
    Hobby string `json:"name" validate:"required,snakecase"`
}

func main() {
    v := validator.New()
    _ = v.RegisterValidation("snakecase", validateSnakeCase)

    correct := user{"playing_game"}
    Incorrect := user{"playingGame"}

    err := v.Struct(correct)
    fmt.Println(err) // nil

    err = v.Struct(Incorrect)
    fmt.Println(err) // error
}

const allows = "abcdefghijklmnopqrstuvwxyz_"

func validateSnakeCase(fl validator.FieldLevel) bool {
    str := fl.Field().String()
    for i := range str {
        if !strings.Contains(allows, str[i:i+1]) {
            return false
        }
    }

    return true
}

Playground

如果您想通过gin,check this out注册该函数

Go相关问答推荐

Kafka架构注册表-Broker:Broker无法验证记录

Python样式生成器实现为通道:过早读取

Golang Gorm Fiber - 如何将定义为别名的名称发送到索引模板?

Json.Unmarshal() 和 gin.BindJson() 之间的区别

从 ApiGateway 中的 lambda Go 返回 Json

用接口来模拟amqp091go的困难

Golang Docker Selenium Chrome

如何从Go项目连接Microsoft Access数据库?

如何在 Go 服务中导入 monorepo 中的包?

为什么docall在singleflight中使用go panic?

linter 警告:返回值被忽略

错误!在为 age-viewer-go 运行 wails dev 或 wails build 命令时

从单词中删除特殊字符

helm :将 YAML 转换为 JSON 时出错:yaml:第 xx 行:未找到预期的密钥

枚举的 Golang 验证器自定义验证规则

无法在 GORM 中排序

将接口方法的参数限制为几个允许的 struct ?

Go 使用 struct 作为接口而不实现所有方法

在 Golang 中获取谷歌云服务帐户的访问令牌?

如何从字符串中删除多个换行符`\n`但只保留一个?