字節(jié)跳動(dòng)打造的輪子:Go 表單驗(yàn)證器
表單驗(yàn)證,Go 圈最知名的應(yīng)該是 https://github.com/go-playground/validator,很強(qiáng)大,Gin 框架用的就是它。今天要介紹的,是字節(jié)跳動(dòng)開源的一個(gè)類似的庫,即 go-tagexpr。
項(xiàng)目地址:https://github.com/bytedance/go-tagexpr,Star 數(shù) 852。
官方介紹,這是一個(gè)有趣的 go struct 標(biāo)記表達(dá)式語法,用于字段驗(yàn)證等。支持?jǐn)?shù)據(jù)綁定和驗(yàn)證。
主要特性有:
支持多種常用運(yùn)算符 支持訪問數(shù)組,切片,字典成員 支持訪問當(dāng)前結(jié)構(gòu)中的任何字段 支持訪問嵌套字段,非導(dǎo)出字段等。 支持寄存器功能表達(dá)式 內(nèi)置 len,sprintf,regexp 函數(shù) 支持單模和多模定義表達(dá)式 參數(shù)檢查子包 使用偏移量指針直接獲取值,獲得更好的性能
看一個(gè)例子代碼:
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:"$"`
}
}
實(shí)話說太復(fù)雜了,看著這表達(dá)式,有點(diǎn)懵。個(gè)人還是覺得 https://github.com/go-playground/validator 更好,你覺得呢?
文末「閱讀原文」可直達(dá)項(xiàng)目首頁。
今天的項(xiàng)目大家覺得怎么樣嗎?如果你喜歡,請(qǐng)?jiān)谖恼碌撞苛粞浴Ⅻc(diǎn)贊或關(guān)注轉(zhuǎn)發(fā),你的支持就是我持續(xù)更新的最大動(dòng)力!
推薦閱讀
評(píng)論
圖片
表情
