精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品久久国产精麻豆96堂| 老太脱裤让老头玩ⅹxxxx| 91九色蝌蚪91por成人| 亚洲一区在线| 亚洲精品成人av| mm1313亚洲国产精品无码试看| 麻豆视频在线观看免费网站| jlzzjlzz国产精品久久| 国产精品一区二区三区免费视频| www青青草原| 国产免费av一区二区三区| 欧美一区二区视频免费观看| 日本成年人网址| 26uuu亚洲电影在线观看| 久久亚洲二区三区| 成人欧美一区二区三区视频 | 精品国产网站| 欧美mv日韩mv国产网站| 91欧美视频在线| 亚洲色图官网| 亚洲一区二区三区在线播放| 亚洲精品欧美精品| 欧美偷拍视频| 成人精品一区二区三区中文字幕| 国产欧美最新羞羞视频在线观看| 亚洲久久在线观看| 好看的av在线不卡观看| 久久视频在线播放| 亚洲高潮女人毛茸茸| 欧美爱爱网站| 欧美不卡在线视频| 激情文学亚洲色图| 欧美videos粗暴| 日本道免费精品一区二区三区| 国产精品久久久久7777| av免费在线网站| 一本色道久久综合精品婷婷| 欧美亚洲国产激情| 亚洲色图狂野欧美| 美国黄色一级毛片| 国产一区二区三区不卡av| 欧美大片一区二区三区| 一区二区三区四区毛片| 国产福利亚洲| 欧美在线观看视频一区二区| 男人的天堂99| 性欧美hd调教| 91久久国产综合久久| 国产黄色一级网站| 麻豆mv在线观看| 欧美日韩在线免费| 成年人黄色片视频| 精品成人免费一区二区在线播放| 一本大道久久精品懂色aⅴ| 久久成人免费观看| 欧美gay囗交囗交| 色综合久久88色综合天天 | 欧美性受xxxx黑人| 欧美日韩有码| 丝袜亚洲另类欧美重口| 青青草华人在线视频| 日韩在线观看一区| 不卡毛片在线看| 欧美精品久久久久性色| 亚洲无毛电影| 欧美一区深夜视频| 中文字幕人妻精品一区| 精品一区二区免费在线观看| 91网站在线看| 免费看国产片在线观看| 26uuuu精品一区二区| 亚洲aⅴ天堂av在线电影软件| 91福利在线视频| 亚洲老司机在线| 欧美大黑帍在线播放| bbw在线视频| 91激情在线视频| 一级做a免费视频| 中文字幕日韩在线| 亚洲精品一区二区在线| www国产精品视频| 亚洲一级Av无码毛片久久精品| 国产精品xxx在线观看| 亚洲女人天堂成人av在线| 国产精品美女高潮无套| 一个色综合网| 欧美性视频精品| 夜夜躁狠狠躁日日躁av| 成人自拍视频在线| 色播五月综合| bl在线肉h视频大尺度| 色猫猫国产区一区二在线视频| 自拍偷拍一区二区三区四区| 岛国精品一区| 中文字幕一区二区三区电影| 国产精品成人aaaa在线| 日韩高清不卡在线| 成人欧美一区二区三区在线观看| 美女欧美视频在线观看免费 | 欧美成人基地| 久久久精品电影| 亚洲天堂视频网站| 国产精品夜夜嗨| 日韩欧美亚洲在线| 精品视频在线观看一区| 色老头在线观看| 欧美性做爰猛烈叫床潮| 一边摸一边做爽的视频17国产 | 三年中文高清在线观看第6集 | 精品一二三区视频| 亚洲最大色网站| 亚洲黄色小视频在线观看| 操欧美女人视频| 主播福利视频一区| caoporn国产| 国产成人av资源| 综合网五月天| 精品成人av| 亚洲精品电影久久久| 精品国产欧美日韩不卡在线观看| 久久午夜视频| 不卡一区二区三区四区| 国产一区二区黄色| 超碰在线免费公开| 91国偷自产一区二区三区成为亚洲经典 | 亚洲精品国精品久久99热| 欧美三级黄色大片| 久久精品午夜| 精品一区二区不卡| 嗯啊主人调教在线播放视频 | 国产精品自产拍高潮在线观看| 无码精品在线观看| 亚洲成人激情综合网| 国产精品偷伦视频免费观看了| 天天久久综合| 国产日韩欧美在线| 精品亚洲综合| 欧美日韩中文字幕在线| 182在线视频| 最新日韩av| 国产在线一区二区三区欧美| 免费在线观看av电影| 日韩一区二区三区视频在线| 成人免费精品动漫网站| 国内精品伊人久久久久av影院| 偷拍视频一区二区| 国产极品久久久久久久久波多结野| 日韩成人在线视频| 日韩一区二区视频在线| 91免费在线视频观看| 欧美性大战久久久久xxx| 欧洲在线一区| 欧美在线一级视频| 激情小说 在线视频| 欧美视频一区二区| 秋霞欧美一区二区三区视频免费| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩精品久久久免费观看| 3d欧美精品动漫xxxx无尽| 在线播放国产精品| 国产精品久久久久久在线| 一区二区视频在线| 国产精品久久久久久久无码| 中文字幕av影院| 国产综合成人久久大片91| 9999在线观看| 视频在线亚洲| 97超级碰在线看视频免费在线看| 色视频精品视频在线观看| 色爱区综合激月婷婷| 亚洲色图27p| 国产乱码精品一区二区三区五月婷| 99中文字幕在线观看| 爱爱精品视频| 日本不卡免费高清视频| 又爽又大又黄a级毛片在线视频| 欧美浪妇xxxx高跟鞋交| 欧美日韩国产精品一区二区三区| 成人黄色在线视频| 久久黄色免费看| 亚洲午夜精品一区 二区 三区| 国产精品香蕉视屏| 欧美18av| 欧美日韩999| 手机看片福利在线观看| 欧美日韩美女一区二区| 久久久精品91| 国产欧美日韩综合| 成人不卡免费视频| 亚洲视频大全| 中文字幕色一区二区| xvideos.蜜桃一区二区| 国产成人a亚洲精品| a在线免费观看| 亚洲乱码国产乱码精品精天堂 | 另类成人小视频在线| 成年人深夜视频| 欧美中文一区二区| 国产精品自拍首页| 台湾天天综合人成在线| 欧美一区二区三区免费视| a毛片在线播放| 亚洲性69xxxbbb| 亚洲高清精品视频| 欧美午夜宅男影院| av黄色在线看| 夜夜嗨av一区二区三区网页| 一级二级黄色片| 成年人午夜久久久| 亚洲天堂网站在线| 日韩电影在线观看电影| 免费在线观看视频a| 天天做天天爱天天综合网| 欧美亚洲另类久久综合| 99这里只有精品视频| 91精品久久久久久久久久 | 免费欧美在线视频| 人体内射精一区二区三区| 久久精品国内一区二区三区水蜜桃| 久久精品国产美女| 99久久婷婷国产综合精品青牛牛 | 欧美大码xxxx| 日本在线观看| 一区二区三区视频在线| 青青草av免费在线观看| 日韩av网站在线| 亚洲国产成人在线观看| 91精品欧美一区二区三区综合在| 伊人成年综合网| 在线亚洲免费视频| 日韩不卡在线播放| 午夜影院在线观看欧美| 精品99在线观看| 一区二区三区在线影院| 国精品无码一区二区三区| 中文字幕在线观看不卡视频| 四虎国产成人精品免费一女五男| 久久久www成人免费无遮挡大片| aa片在线观看视频在线播放| 白白色 亚洲乱淫| 国产伦精品一区二区三区88av| 国内欧美视频一区二区| 国产毛片久久久久久| 韩国成人精品a∨在线观看| 999精品视频在线| 日韩福利电影在线| 手机在线免费观看毛片| 麻豆专区一区二区三区四区五区| 九一精品在线观看| 久久精品国产色蜜蜜麻豆| 国产视频1区2区3区| 久久99国产精品麻豆| 国产传媒免费观看| 国产激情一区二区三区四区 | 性网爆门事件集合av| 日韩无一区二区| 少妇精品高潮欲妇又嫩中文字幕| 亚洲精品国产品国语在线| 男人的天堂在线免费视频| 亚洲欧洲偷拍精品| 999国产在线视频| 久久久999国产| 日本成人不卡| 97视频网站入口| 88xx成人免费观看视频库| 国产欧美日韩视频| 精品国产亚洲日本| 国产日韩在线一区二区三区| 精品人妻一区二区三区日产乱码| 粉嫩13p一区二区三区| 性鲍视频在线观看| 99久久精品免费观看| 精品成人av一区二区三区| 国产精品免费视频观看| 男人与禽猛交狂配| 精品人伦一区二区三区蜜桃免费| caoporn国产| 欧美一区二区在线观看| 五月激情婷婷综合| 色99之美女主播在线视频| 欧美人与牲禽动交com| 欧美中在线观看| av一级久久| 麻豆av一区| 91精品啪在线观看国产81旧版| 成人在线视频一区二区三区| 久久久亚洲一区| 久久综合在线观看| 久久久亚洲高清| 91视频免费在线看| 欧美性生活大片免费观看网址| 国产精品久久777777换脸| 亚洲国产精品va| 国产精品久久久久久福利| 97在线免费观看视频| 欧美成a人片免费观看久久五月天| 高清一区二区三区视频| 日韩成人精品一区二区| 国产白丝袜美女久久久久| 韩国av一区二区三区在线观看| 欧美成人午夜精品免费| 一区二区三区四区亚洲| 小泽玛利亚一区二区三区视频| 精品伦理精品一区| 日本免费中文字幕在线| 奇米成人av国产一区二区三区| 国产在线视频欧美一区| 日韩三级电影免费观看| 亚洲三级影院| 97超碰免费在线观看| 中文字幕av一区二区三区| 中文字幕视频网| 亚洲第一偷拍网| 日韩特级毛片| 国产欧美精品一区二区三区-老狼| 神马午夜久久| 黄色一级视频在线播放| 国产精品系列在线播放| 最新av电影网站| 欧美视频在线一区二区三区 | 亚洲成人精品久久| 久草中文在线观看| 国产精品视频资源| 精品久久久久久久| 日韩avxxx| av电影天堂一区二区在线观看| 午夜写真片福利电影网| 欧美猛男男办公室激情| 成人av电影观看| 青青草一区二区| 妖精视频一区二区三区| 毛片在线视频播放| av中文字幕一区| 国产香蕉在线视频| 亚洲福利视频二区| 超碰激情在线| 精品免费国产| 国产精品综合色区在线观看| 国产国语性生话播放| 五月天激情小说综合| 狠狠躁日日躁夜夜躁av| 久久久久久九九九| 国内毛片久久| 18禁免费观看网站| 91丨九色porny丨蝌蚪| 亚洲欧美综合自拍| 亚洲香蕉av在线一区二区三区| 竹内纱里奈兽皇系列在线观看 | 日本成人一区| 国产成人aa精品一区在线播放| 国产成人一区| 国产精品最新在线观看| 少妇喷水在线观看| 久久久久久久一区二区| 欧美大片网址| 成人黄色片视频| 欧美国产精品一区| 亚洲熟妇av乱码在线观看| 色吧影院999| 蜜桃精品视频| 国产免费黄色一级片| 91麻豆国产福利精品| 中文字幕日韩第一页| 久久久久www| 成人动态视频| 中文字幕乱码人妻综合二区三区 | 久久人体大尺度| 五月天综合网| 国产乱码精品一区二区三区忘忧草 | 日韩1区在线| 日本女人性视频| 欧美日韩免费一区| 1pondo在线播放免费| 91精品国产高清久久久久久91裸体| 亚洲人成人一区二区三区| 人人妻人人藻人人爽欧美一区| 欧美日韩你懂得| 国产性生活大片| 国产精品中文字幕欧美| 91人妻一区二区三区蜜臀| 精品va天堂亚洲国产| 另类专区亚洲| 欧美三级午夜理伦三级老人| www.日韩在线| 一级α片免费看刺激高潮视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 久9re热视频这里只有精品| 欧美午夜性生活| 亚洲一区二区三区视频在线播放| 黄色小视频在线免费观看| 91入口在线观看| 日韩 欧美一区二区三区| 欧美成欧美va| 亚洲午夜久久久影院| 国产成人高清精品免费5388| 黄色片在线免费| 亚洲成va人在线观看| 日本精品在线| 精品国产乱码久久久久久108| 麻豆精品久久久|