Golang Go语言中基于泛型实现的数据校验器, 有兴趣了解下吗?
https://github.com/lxzan/passport
不如结构体标签紧凑, 但是性能更好, 有编译检查和代码提示
type Req struct {
Name string `json:"name"`
Typ int `json:"typ"`
Age int `json:"age"`
Roles []int `json:"roles"`
}
func (c *Req) Validate() error {
return passport.Validate(
passport.String(“Name”, c.Name).Required().Alphabet(),
passport.Ordered(“Typ”, c.Typ).IncludeBy(1, 3, 5),
passport.Ordered(“Age”, c.Age).Gte(18),
passport.Slice(“Roles”, c.Roles).Required(),
)
}
Golang Go语言中基于泛型实现的数据校验器, 有兴趣了解下吗?
更多关于Golang Go语言中基于泛型实现的数据校验器, 有兴趣了解下吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
感觉 Slice 是不是还要考虑拓展下类似go<br>[]string{""}<br>
更多关于Golang Go语言中基于泛型实现的数据校验器, 有兴趣了解下吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
过滤空字符串 ?
能定义错误提示信息?
感觉不行,但是个人项目,总感觉用着不放心;
目前,我是使用如下方法:go<br><br>type UpdateArrCacheParams struct {<br> ID int64 `json:"id" binding:"required"`<br> Name string `json:"name" binding:"required"`<br> Values []any `json:"values" binding:"required"`<br>}<br><br>func (u UpdateArrCacheParams) GetMessages() valid.ValidatorMessages {<br> return valid.ValidatorMessages{<br> "ID.required": "请输入 ID",<br> "Name.required": "请输入名称",<br> "Values.required": "请输入值",<br> }<br>}<br><br><br>type Validator interface {<br> GetMessages() ValidatorMessages<br>}<br><br>type ValidatorMessages map[string]string<br><br>// GetErrorMsg 获取错误信息<br>func GetErrorMsg(request any, err error) error {<br> var validationErrors validator.ValidationErrors<br> if <a target="_blank" href="http://errors.As" rel="nofollow noopener">errors.As</a>(err, &validationErrors) {<br> _, isValidator := request.(Validator)<br><br> for _, v := range err.(validator.ValidationErrors) {<br> // 若 request 结构体实现 Validator 接口即可实现自定义错误信息<br> if isValidator {<br> if message, exist := request.(Validator).GetMessages()[v.Field()+"."+v.Tag()]; exist {<br> return errors.New(message)<br> }<br> }<br> return v<br> }<br> }<br><br> return ErrParams<br>}<br><br><br>
先 star 了,观望观望
刚发了 v0.0.1, 还没去做高级功能, 仅提供一种新的思路
可以参考 JSR 380 Bean Validation 的 API 设计
Java 靠的是注解
所以是参考。还有分组校验的功能
加自定义错误信息的话可能要考虑国际化
已经加了 i18n
不如我写的检查器简洁啊
type Basic struct {
Integer int json:"integer" valid:"required,min=1,max=5"
Float float64 json:"float" valid:"min=2"
}
用反射的话一堆高星项目可以选择
不是有 json schema 校验么 0 0
当然有兴趣!在Go语言中,泛型的引入为开发者提供了强大的工具,使得编写更加通用和可复用的代码成为可能。基于泛型实现的数据校验器是一个非常有意义的探索方向。
数据校验是软件开发中不可或缺的一环,它确保了数据的准确性和可靠性。在Go语言中,传统的数据校验通常依赖于大量的重复代码和类型断言,这不仅增加了代码的复杂度,也降低了代码的可维护性。
而泛型则提供了一种优雅的方式来解决这一问题。通过定义泛型接口和泛型函数,我们可以创建一种通用的数据校验框架,该框架能够处理不同类型的数据,并应用相应的校验规则。这样,开发者就可以避免编写大量的重复代码,同时提高代码的可读性和可维护性。
此外,基于泛型的数据校验器还可以与Go语言的类型系统紧密结合,实现更加严格的类型检查和类型安全。这有助于在编译阶段就捕获潜在的错误,从而提高代码的健壮性和稳定性。
总的来说,基于泛型实现的数据校验器是一个非常有价值的尝试,它不仅能够提高代码的可复用性和可维护性,还能够增强代码的类型安全性和健壮性。如果你已经在这方面有了初步的尝试或者想法,我非常愿意进一步探讨和交流,共同推动这一领域的发展。