字节跳动打造的轮子:Go 表单验证器

Go语言精选

共 1741字,需浏览 4分钟

 ·

2021-06-13 00:41

表单验证,Go 圈最知名的应该是 https://github.com/go-playground/validator,很强大,Gin 框架用的就是它。今天要介绍的,是字节跳动开源的一个类似的库,即 go-tagexpr。

项目地址:https://github.com/bytedance/go-tagexpr,Star 数 852。

官方介绍,这是一个有趣的 go struct 标记表达式语法,用于字段验证等。支持数据绑定和验证。

主要特性有:

  • 支持多种常用运算符
  • 支持访问数组,切片,字典成员
  • 支持访问当前结构中的任何字段
  • 支持访问嵌套字段,非导出字段等。
  • 支持寄存器功能表达式
  • 内置 len,sprintf,regexp 函数
  • 支持单模和多模定义表达式
  • 参数检查子包
  • 使用偏移量指针直接获取值,获得更好的性能

看一个例子代码:

type T struct {
  A  int             `tagexpr:"$<0||$>=100"`
  B  string          `tagexpr:"len($)>1 && regexp('^\\w*$')"`
  C  bool            `tagexpr:"expr1:(f.g)$>0 && $; expr2:'C must be true when T.f.g>0'"`
  d  []string        `tagexpr:"@:len($)>0 && $[0]=='D'; msg:sprintf('invalid d: %v',$)"`
  e  map[string]int  `tagexpr:"len($)==$['len']"`
  e2 map[string]*int `tagexpr:"len($)==$['len']"`
  f  struct {
    g int `tagexpr:"$"`
  }
}

实话说太复杂了,看着这表达式,有点懵。个人还是觉得 https://github.com/go-playground/validator 更好,你觉得呢?


文末「阅读原文」可直达项目首页。


今天的项目大家觉得怎么样吗?如果你喜欢,请在文章底部留言、点赞或关注转发,你的支持就是我持续更新的最大动力!



推荐阅读


福利

我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号 「polarisxu」,回复 ebook 获取;还可以回复「进群」,和数万 Gopher 交流学习。

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报