<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          字節(jié)跳動(dòng)打造的輪子:Go 表單驗(yàn)證器

          共 1741字,需瀏覽 4分鐘

           ·

          2021-06-13 00:41

          表單驗(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)力!



          推薦閱讀


          福利

          我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù) ebook 獲??;還可以回復(fù)「進(jìn)群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。

          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品不卡一卡二卡三卡四卡 | 亚洲www在线观看 | 99资源在线 | 日韩字幕 | caopeng97人人 |