Golang Go语言中基于泛型实现的数据校验器, 有兴趣了解下吗?

发布于 1周前 作者 bupafengyu 来自 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

15 回复

感觉 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, &amp;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, 还没去做高级功能, 仅提供一种新的思路

#5 期待新版本

可以参考 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语言的类型系统紧密结合,实现更加严格的类型检查和类型安全。这有助于在编译阶段就捕获潜在的错误,从而提高代码的健壮性和稳定性。

总的来说,基于泛型实现的数据校验器是一个非常有价值的尝试,它不仅能够提高代码的可复用性和可维护性,还能够增强代码的类型安全性和健壮性。如果你已经在这方面有了初步的尝试或者想法,我非常愿意进一步探讨和交流,共同推动这一领域的发展。

回到顶部