精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Gin 框架怎么使用自定義驗證器?

開發 前端
本文我們介紹 Gin 框架怎么使用自定義驗證器,分別列舉了字段級別和結構體級別自定義驗證器的使用方式。需要注意的是,它們并不是線程安全的,需要在任何驗證之前,先注冊自定義驗證器。

1.介紹

Gin 框架自定義驗證器,分為字段級別驗證器和結構體級別驗證器。

其中結構體級別驗證器,可以用于跨字段驗證,也可以用于和字段級別驗證器結合使用。

需要注意的是,結構體級別驗證器的優先級小于字段級別驗證器。

2.字段級別自定義驗證器

定義字段級別驗證器

示例代碼:

var userValidator validator.Func = func(fl validator.FieldLevel) bool {
 val, ok := fl.Field().Interface().(string)
 if ok {
  illegalName := []string{"admin", "Admin", "guest", "Guest"}
  for _, v := range illegalName {
   if v == val {
    return false
   }
  }
 }
 return true
}

閱讀上面這段代碼,我們定義一個 validator.Func 類型的函數變量,參數入參的類型是 validator.FieldLevel,返回結果是一個 bool 類型的變量。

函數體中,使用類型斷言,獲取字段的值,然后進行邏輯驗證。

注冊自定義驗證器

示例代碼:

func main() {
 r := gin.Default()
 // 注冊自定義驗證器
 if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
  err := v.RegisterValidation("user_validator", userValidator)
  if err != nil {
   return
  }
 }
 r.GET("/login", Login)
 err := r.Run()
 if err != nil {
  return
 }
}

閱讀上面這段代碼,我們使用 RegisterValidation 方法,注冊自定義驗證器 userValidator,該方法接收的第一個參數是用于結構體字段的 tag 名稱,第二個參數是自定義驗證器的函數名稱。

需要注意的是,如果我們注冊的驗證器標簽名(用于結構體字段的 tag 名稱)已存在,則會被當前驗證器函數替換掉。

使用自定義驗證器

示例代碼:

func Login(c *gin.Context) {
 user := &User{}
 err := c.ShouldBind(user)
 if err != nil {
  c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  return
 }
 c.JSON(http.StatusOK, gin.H{
  "data": user,
 })
}

type User struct {
 Name     string `form:"name" binding:"required,user_validator"`
 Password string `form:"password"`
}

閱讀上面這段代碼,我們在請求參數結構體的字段中,添加我們注冊自定義驗證器時的標簽名 user_validator,即可使用自定義驗證器。

輸出結果:

curl -s -X GET http://127.0.0.1:8080/login\?name\=admin\&password\=123456 | jq
{
  "error": "Key: 'User.Name' Error:Field validation for 'Name' failed on the 'user_validator' tag"
}

3.結構體級別自定義驗證器

定義結構體級別驗證器

示例代碼:

func UserStructLevelValidation(sl validator.StructLevel) {
 user := sl.Current().Interface().(User)
 if len(user.TrueName) == 0 && len(user.NickName) == 0 {
  sl.ReportError(user.TrueName, "TrueName", "true_name", "true_name_or_nick_name", "")
  sl.ReportError(user.TrueName, "NickName", "nick_name", "true_name_or_nick_name", "")
 }
}

閱讀上面這段代碼,我們定義一個函數,該函數接收一個 validator.StructLevel 類型的參數,函數體中使用類型斷言,獲取結構體的值,然后進行邏輯驗證。

注冊自定義驗證器

示例代碼:

func main() {
 r := gin.Default()
 // 注冊自定義驗證器
 if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
  v.RegisterStructValidation(UserStructLevelValidation, User{})
 }
 r.POST("/register", Register)
 err := r.Run()
 if err != nil {
  return
 }
}

閱讀上面這段代碼,我們使用 RegisterStructValidation 方法,注冊自定義驗證器 UserStructLevelValidation,該方法接收兩個參數,分別是 StructLevelFunc 函數類型的自定義驗證器,和需要驗證的結構體類型。

使用自定義驗證器

示例代碼:

func Register(c *gin.Context) {
 var user User
 err := c.ShouldBind(&user)
 if err != nil {
  c.JSON(http.StatusBadRequest, gin.H{
   "error": err.Error(),
  })
  return
 }
 c.JSON(http.StatusOK, gin.H{
  "data": user,
 })
}

type User struct {
 TrueName string `json:"true_name"`
 NickName string `json:"nick_name"`
 Password string `json:"password" binding:"required"`
}

閱讀上面這段代碼,我們不需要在結構體字段標簽中有任何操作,即可使用自定義結構體級別的驗證器。

以下是結構體級別驗證器單獨使用,和結合字段級別驗證器(標簽驗證器)一起使用的輸出結果。

輸出結果:

curl -s -H "content-type: application/json" -X POST -d '{"true_name": "", "nick_name": "", "password": "123456"}' http://127.0.0.1:8080/register | jq
{
  "error": "Key: 'User.TrueName' Error:Field validation for 'TrueName' failed on the 'true_name_or_nick_name' tag\nKey: 'User.NickName' Error:Field validation for 'NickName' failed on the 'true_name_or_nick_name' tag"
}

curl -s -H "content-type: application/json" -X POST -d '{"true_name": "", "nick_name": "", "password": ""}' http://127.0.0.1:8080/register | jq  
{
  "error": "Key: 'User.Password' Error:Field validation for 'Password' failed on the 'required' tag\nKey: 'User.TrueName' Error:Field validation for 'TrueName' failed on the 'true_name_or_nick_name' tag\nKey: 'User.NickName' Error:Field validation for 'NickName' failed on the 'true_name_or_nick_name' tag"
}

4.總結

本文我們介紹 Gin 框架怎么使用自定義驗證器,分別列舉了字段級別和結構體級別自定義驗證器的使用方式。

需要注意的是,它們并不是線程安全的,需要在任何驗證之前,先注冊自定義驗證器。

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2025-03-31 01:30:00

Gin框架模型

2024-12-09 00:00:15

Gin框架中間件

2009-02-10 12:55:39

自定義控件AJAX.NET

2024-11-11 00:45:54

Gin框架字段

2023-10-24 13:48:50

自定義注解舉值驗證

2009-06-25 14:53:35

自定義UI組件JSF框架

2009-06-23 11:35:44

JSF的Naviati

2019-12-25 11:47:27

LinuxFVWM

2010-10-25 16:05:07

oracle自定義函數

2022-01-14 09:17:13

PythonAPISIX插件

2022-05-07 10:22:32

JavaScript自定義前端

2009-07-07 14:32:47

JDK日志Formatter

2021-01-14 19:04:36

框架數據庫mybatis

2009-11-24 15:11:21

ASP.NET MVC

2015-02-12 15:33:43

微信SDK

2024-02-19 07:40:10

2022-09-13 15:44:52

VSLook插件

2021-10-28 08:39:22

Node Export自定義 監控

2021-05-28 08:58:41

Golang網卡metrics

2009-07-07 14:00:25

JDK日志Handler
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区三区免费| 亚洲搞黄视频| 久久亚洲美女| 少妇精69xxtheporn| 在线能看的av网站| 黄页网站在线| 久久久久久久国产精品影院| 国产在线不卡精品| 懂色av.com| 欧美亚洲在线日韩| 欧美日本一道本| 性欧美大战久久久久久久| 国产在线视频网址| 高清不卡在线观看av| 国产91色在线免费| 女女百合国产免费网站| 欧美一级免费片| 日韩av电影天堂| 日韩精品在线视频美女| 一道本视频在线观看| 日韩一区二区三区在线播放| 免费在线a视频| 亚洲成人三级| 99国产精品国产精品毛片| 国产精品美女www| 国产视频91在线| 我不卡神马影院| 亚洲色图第三页| 亚洲美女在线播放| 四虎影视精品永久在线观看| 欧美色视频日本版| 无码人妻精品一区二区蜜桃百度| 精品久久久久一区二区三区| 成人动漫精品一区二区| 国产日韩欧美另类| 一级黄色在线视频| 99国产精品久久久久久久| 久久高清视频免费| 又色又爽的视频| 免费精品国产| 亚洲精品国产suv| 成人免费播放视频| 欧洲亚洲精品久久久久| 色哟哟日韩精品| 国产中文字幕免费观看| gogo高清在线播放免费| 亚洲人精品一区| 久久久国产精华液999999| 国产黄色在线| 日韩主播视频在线| 777精品视频| 日韩精品成人在线| 91久久综合| 91国产视频在线| 国产稀缺真实呦乱在线| 亚洲午夜91| 久久久久国产精品一区| 久久免费精彩视频| 伊人久久大香线蕉综合热线| 亚洲精品福利在线观看| 亚洲一区二区在线观看视频| 国内自拍欧美激情| 天天干中文字幕| 欧美黄免费看| 欧美成人精品一区二区| 国产67194| 综合久久99| 欧美裸体xxxx极品少妇| 18岁成人毛片| 国内精品嫩模av私拍在线观看| 欧美交受高潮1| 日本一级淫片免费放| 亚洲激情欧美| 日韩av不卡在线| 成人毛片一区二区三区| 老司机一区二区| 99久久精品无码一区二区毛片| 亚洲爱情岛论坛永久| 成人免费毛片片v| 国产精品观看在线亚洲人成网| 波多野结衣理论片| 久久av老司机精品网站导航| 69精品小视频| 久草视频一区二区| 麻豆成人在线观看| 114国产精品久久免费观看| 亚洲精品97久久中文字幕无码| gogogo免费视频观看亚洲一| 欧美性天天影院| 在线a免费看| 亚洲综合视频在线| 亚洲成人精品电影在线观看| 添女人荫蒂视频| 日本学生初尝黑人巨免费视频| 亚洲综合中文| 97视频在线观看播放| 日日夜夜操视频| 精品一区二区在线播放| 国产麻豆日韩| 欧美视频综合| 亚洲欧美一区二区三区国产精品 | 疯狂做受xxxx欧美肥白少妇| 国产又大又黄又猛| a看欧美黄色女同性恋| 欧美三级日韩三级| 韩国三级与黑人| 伊人春色之综合网| 久久99国产精品自在自在app| 中文字幕日韩免费| 成人听书哪个软件好| 亚洲国产欧洲综合997久久| 欧美bbbxxxxx| 欧美蜜桃一区二区三区| a天堂视频在线观看| 97品白浆高清久久久久久| 亚洲欧美国产va在线影院| 加勒比婷婷色综合久久| 久久亚洲色图| 国产精品亚洲综合| 超碰porn在线| 亚洲免费观看高清完整版在线| 1024精品视频| 亚洲精品观看| 日韩中文字幕网站| 成人免费毛片男人用品| 成人黄色网址在线观看| 色撸撸在线观看| 欧美va在线| 亚洲精品视频网上网址在线观看| 九九九久久久久| 国产精品大片| 国产日韩欧美电影在线观看| 国产小视频在线观看| 婷婷国产v国产偷v亚洲高清| 国产一级二级av| 婷婷亚洲最大| 91精品国产自产在线| 成年人免费在线视频| 一本久久综合亚洲鲁鲁五月天 | 97久久综合区小说区图片区| 久久天天躁狠狠躁老女人| 日韩欧美国产成人精品免费| 日韩和欧美的一区| 欧美日本亚洲| 亚洲欧洲自拍| 国产丝袜一区二区三区| 国产欧美一区二区三区在线看蜜臂| 国产福利视频一区二区三区| 午夜探花在线观看| 亚洲国产天堂| 久久综合五月天| 国产区精品在线| 亚洲免费观看在线观看| www.久久av.com| 99久久www免费| 国产区精品视频| 国产剧情在线| 日韩欧美一区二区视频| 九九热精品在线观看| 国产91精品一区二区麻豆亚洲| 国产精品av免费观看| 一区中文字幕电影| 国内精品久久久久久久| 无码国产色欲xxxx视频| 欧美视频中文在线看| 亚洲精品午夜视频| 蜜臀av性久久久久蜜臀av麻豆| 宅男av一区二区三区| 国产麻豆一区二区三区| 欧美人成在线视频| 污污视频在线观看网站| 一本一道久久a久久精品| 快灬快灬一下爽蜜桃在线观看| 久久99深爱久久99精品| 天天爱天天做天天操| 在线综合色站| 欧洲精品毛片网站| 成人在线二区| 日韩欧美激情在线| 欧美一级视频免费观看| 欧美国产精品一区| 一卡二卡三卡四卡五卡| 一区二区三区高清视频在线观看| 欧美日韩精品一区| www.久久草.com| 亚洲**2019国产| 超碰97在线免费观看| 欧美日韩一区二区在线观看视频| 国产97免费视频| 91视视频在线观看入口直接观看www| 午夜视频在线瓜伦| 欧美阿v一级看视频| 蜜桃导航-精品导航| 日韩免费在线电影| 久久久久久18| 在线播放麻豆| 日韩精品极品视频免费观看| 亚洲天堂手机在线| 欧美韩国一区二区| www.色.com| 久久青草久久| 高清无码视频直接看| 国产一区二区精品久| 97中文在线| 精品欧美日韩精品| 国产做受高潮69| 不卡的在线视频| av在线资源站| 欧美zozo另类异族| 中文字幕在线观看1| 亚洲午夜久久久久| 亚洲一区电影在线观看| 91香蕉视频在线| 免费看的av网站| 日产国产高清一区二区三区| 国产二区视频在线| 97se亚洲| 成人免费淫片视频软件| jizzjizz中国精品麻豆| 欧美日韩国产经典色站一区二区三区| 精品在线视频免费观看| 中文在线一区二区| aa片在线观看视频在线播放| 国内外成人在线视频| 国产一级不卡毛片| 亚洲综合三区| 国产美女主播在线| 欧美阿v一级看视频| 一区一区视频| 成人av国产| 欧美日韩另类综合| 亚洲视频分类| 久久久久久亚洲精品不卡4k岛国| 中文字幕一区二区三区中文字幕| 成人两性免费视频| 日本免费成人| 国产精品久久久av| 日本h片久久| 国产成人高潮免费观看精品| 自拍一区在线观看| 91精品国产99久久久久久| 91福利在线免费| 久久久久久久爱| 永久免费网站在线| 久久影视电视剧免费网站| 日本成a人片在线观看| 日韩在线视频网| 日本高清视频在线播放| 视频在线一区二区| 拍真实国产伦偷精品| 日韩有码在线播放| 麻豆免费在线视频| 欧美成人午夜影院| 久久精品magnetxturnbtih| 国产成人a视频高清在线观看| 国产极品精品在线观看| 日韩高清不卡| 国产日韩精品视频| 国产一区二区在线观| 91精品国产91久久久久青草| 天堂精品久久久久| 国产免费一区二区| 在线能看的av网址| 欧美影院久久久| gogo在线高清视频| 久久99热精品这里久久精品| 182在线视频观看| 欧美在线视频导航| 成人黄色视屏网站| 91精品在线一区| 97品白浆高清久久久久久| 精品无人区一区二区三区竹菊| 国产成人精品一区二区三区在线| 国产精品美女av| 成人激情久久| 国产精品久久7| 蜜桃一区二区三区| 亚洲欧美国产不卡| 欧美激情成人在线| 北条麻妃在线观看| 久久精品国产一区二区三| 久久精品一二三四| 97国产一区二区| 九九热久久免费视频| 夜夜精品浪潮av一区二区三区| 亚洲伊人成人网| 欧美肥胖老妇做爰| 农村少妇久久久久久久| 国产性色av一区二区| 国产激情在线视频| 欧美整片在线观看| 成年永久一区二区三区免费视频| 国产精品12| 日韩精品一区二区久久| www.好吊操| 秋霞成人午夜伦在线观看| 麻豆tv在线观看| 中文字幕av一区二区三区免费看 | 日韩精品一区二区三区免费观影 | 欧美一级专区免费大片| 中文字幕在线观看视频一区| 91精品国产全国免费观看| 五月色婷婷综合| 久久久999精品| 欧美momandson| 成人一区二区三区四区| 日韩国产在线| 久章草在线视频| 懂色av一区二区三区免费观看| 我不卡一区二区| 久久女同性恋中文字幕| 日韩av手机在线免费观看| 欧美体内谢she精2性欧美| 99热这里只有精品99| 永久免费毛片在线播放不卡 | 一区二区国产盗摄色噜噜| 老熟妇一区二区三区| 亚洲成人中文字幕| 国产香蕉在线观看| 精品精品国产国产自在线| 一区二区乱码| 国产精品视频在线免费观看| 影视一区二区| 日本人视频jizz页码69| 91捆绑美女网站| 免费观看一级视频| 都市激情亚洲色图| 成人h动漫精品一区二区无码| 中文字幕精品av| 裤袜国产欧美精品一区| 精品久久久久久乱码天堂| 欧美激情无毛| 三日本三级少妇三级99| 国产精品视频一二三区 | 欧美激情成人动漫| 成人午夜在线观看| 国产精品99久久| www.cao超碰| 国产精品久久久久婷婷| 中国一区二区视频| 亚洲性视频网站| 三级成人黄色影院| 欧美成人在线免费观看| 亚洲一区日韩| 少妇特黄一区二区三区| 欧美日韩精品国产| 日韩一区av| 国产成人精品一区二区在线| 久久不见久久见国语| 成人精品小视频| 欧美激情在线一区二区| 中文在线字幕av| 色偷偷噜噜噜亚洲男人| 欧美激情福利| 色呦呦网站入口| 国产精品一区二区三区99| 久草资源在线视频| 337p日本欧洲亚洲大胆精品| av资源网在线播放| 蜜桃传媒视频第一区入口在线看| 欧美专区18| 国产aaaaaaaaa| 7777精品伊人久久久大香线蕉的| 麻豆视频网站在线观看| 99精彩视频| 亚洲深夜av| 影音先锋男人在线| 8x福利精品第一导航| 色呦呦在线资源| 精品亚洲第一| 日韩不卡在线观看日韩不卡视频| 美国精品一区二区| 日韩亚洲国产中文字幕欧美| av免费在线视| 青娱乐一区二区| 欧美日韩mv| 视频免费在线观看| 色呦呦日韩精品| 免费看美女视频在线网站| 成人黄色片视频网站| 国产欧美成人| 亚洲天堂精品一区| 欧美α欧美αv大片| gay欧美网站| 国产免费一区二区三区四在线播放| 国产精品一区二区黑丝| 久久黄色精品视频| 久久久国产成人精品| 欧美sss在线视频| 国产九九热视频| 国产午夜亚洲精品羞羞网站| 中文字幕 视频一区| 欧美激情国产日韩精品一区18| 欧美日韩破处视频| 美女黄色免费看| 日本一区二区三区dvd视频在线| av中文字幕免费| 国产98色在线| 狠狠爱综合网| 顶级黑人搡bbw搡bbbb搡|