欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go的gin參數(shù)校驗(yàn)中的validator庫(kù)詳解

 更新時(shí)間:2023年08月18日 14:18:33   作者:Looooking  
這篇文章主要介紹了Go的gin參數(shù)校驗(yàn)之validator庫(kù),使用 validator 以后,只需要在定義結(jié)構(gòu)體時(shí)使用 binding 或 validate tag標(biāo)識(shí)相關(guān)校驗(yàn)規(guī)則,就可以進(jìn)行參數(shù)校驗(yàn)了,而不用自己?jiǎn)为?dú)去寫常見(jiàn)的校驗(yàn)規(guī)則,需要的朋友可以參考下

使用 validator 以后,只需要在定義結(jié)構(gòu)體時(shí)使用 binding validate tag標(biāo)識(shí)相關(guān)校驗(yàn)規(guī)則,就可以進(jìn)行參數(shù)校驗(yàn)了,而不用自己?jiǎn)为?dú)去寫常見(jiàn)的校驗(yàn)規(guī)則。

main.go

package main
import (
	"fmt"
	"github.com/go-playground/validator/v10"
	"github.com/go-playground/locales/zh_Hans_CN"
	unTrans "github.com/go-playground/universal-translator"
	zhTrans "github.com/go-playground/validator/v10/translations/zh"
)
type User struct {
	Username string `validate:"min=6,max=10,contains=ook,startswith=He"`
	Age      uint8  `validate:"gte=1,lte=10"`
	Sex      string `validate:"oneof=female male"`
	Email    string `validate:"email"`
}
func main() {
	validate := validator.New()
	//user := User{Username: "Heooking", Age: 6, Sex: "male", Email: "test@qq.com"}
	user := User{Username: "Looking", Age: 26, Sex: "male", Email: "qq.com"}
	err := validate.Struct(user)
	// 默認(rèn)英文提示
	if err != nil {
		fmt.Println(err)
		//Key: 'User.Username' Error:Field validation for 'Username' failed on the 'startswith' tag
		//Key: 'User.Age' Error:Field validation for 'Age' failed on the 'lte' tag
		//Key: 'User.Email' Error:Field validation for 'Email' failed on the 'email' tag
	}
	fmt.Println()
	// 中文錯(cuò)誤提示
	uni := unTrans.New(zh_Hans_CN.New())
	trans, _ := uni.GetTranslator("zh_Hans_CN")
	zhTrans.RegisterDefaultTranslations(validate, trans)
	if err != nil {
		for _, v := range err.(validator.ValidationErrors) {
			fmt.Println(v.Translate(trans))
			//Username必須以文本'He'開(kāi)頭
			//Age必須小于或等于10
			//Email必須是一個(gè)有效的郵箱
		}
	}
}

go.mod

module test
go 1.17
require (
	github.com/go-playground/validator/v10 v10.15.0
)
require (
	github.com/gabriel-vasile/mimetype v1.4.2 // indirect
	github.com/go-playground/locales v0.14.1 // indirect
	github.com/go-playground/universal-translator v0.18.1 // indirect
	github.com/leodido/go-urn v1.2.4 // indirect
	golang.org/x/crypto v0.7.0 // indirect
	golang.org/x/net v0.8.0 // indirect
	golang.org/x/sys v0.6.0 // indirect
)

常用約束如下:

字符串約束

  • excludesall:不包含參數(shù)中任意的 UNICODE 字符,例如excludesall=ab;
  • excludesrune:不包含參數(shù)表示的 rune 字符,excludesrune=asong;
  • startswith:以參數(shù)子串為前綴,例如startswith=hi;
  • endswith:以參數(shù)子串為后綴,例如endswith=bye。
  • contains=:包含參數(shù)子串,例如contains=email;
  • containsany:包含參數(shù)中任意的 UNICODE 字符,例如containsany=ab;
  • containsrune:包含參數(shù)表示的 rune 字符,例如`containsrune=asong;
  • excludes:不包含參數(shù)子串,例如excludes=email;

范圍約束

范圍約束的字段類型分為三種:

  • 對(duì)于數(shù)值,我們則可以約束其值
  • 對(duì)于切片、數(shù)組和map,我們則可以約束其長(zhǎng)度
  • 對(duì)于字符串,我們則可以約束其長(zhǎng)度

常用 tag 介紹:

  • ne:不等于參數(shù)值,例如 ne=5;
  • gt:大于參數(shù)值,例如 gt=5;
  • gte:大于等于參數(shù)值,例如 gte=50;
  • lt:小于參數(shù)值,例如 lt=50;
  • lte:小于等于參數(shù)值,例如 lte=50;
  • oneof:只能是列舉出的值其中一個(gè),這些值必須是數(shù)值或字符串,以空格分隔,如果字符串中有空格,將字符串用單引號(hào)包圍,例如 oneof=male female。
  • eq:等于參數(shù)值,注意與 len不同。對(duì)于字符串, eq約束字符串本身的值,而 len約束字符串長(zhǎng)度。例如 eq=10;
  • len:等于參數(shù)值,例如 len=10;
  • max:小于等于參數(shù)值,例如 max=10;
  • min:大于等于參數(shù)值,例如 min=10
  • Fields約束
  • eqfield:定義字段間的相等約束,用于約束同一結(jié)構(gòu)體中的字段。例如: eqfield=Password
  • eqcsfield:約束統(tǒng)一結(jié)構(gòu)體中字段等于另一個(gè)字段(相對(duì)),確認(rèn)密碼時(shí)可以使用,例如: eqfiel=ConfirmPassword
  • nefield:用來(lái)約束兩個(gè)字段是否相同,確認(rèn)兩種顏色是否一致時(shí)可以使用,例如: nefield=Color1
  • necsfield:約束兩個(gè)字段是否相同(相對(duì))

常用約束

  • unique:指定唯一性約束,不同類型處理不同:

對(duì)于map,unique約束沒(méi)有重復(fù)的值
        對(duì)于數(shù)組和切片,unique沒(méi)有重復(fù)的值
        對(duì)于元素類型為結(jié)構(gòu)體的碎片,unique約束結(jié)構(gòu)體對(duì)象的某個(gè)字段不重復(fù),使用 unique=field指定字段名

  • email:使用email來(lái)限制字段必須是郵件形式,直接寫eamil即可,無(wú)需加任何指定。
  • omitempty:字段未設(shè)置,則忽略
  • -:跳過(guò)該字段,不檢驗(yàn);
  • |:使用多個(gè)約束,只需要滿足其中一個(gè),例如rgb|rgba;
  • required:字段必須設(shè)置,不能為默認(rèn)值;

到此這篇關(guān)于Go的gin參數(shù)校驗(yàn)之validator庫(kù)的文章就介紹到這了,更多相關(guān)Go validator庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go中Channel發(fā)送和接收操作指南

    Go中Channel發(fā)送和接收操作指南

    在golang中channel屬于較為核心的一個(gè)功能,尤其在go協(xié)程中,channel功能尤為重要,下面這篇文章主要給大家介紹了關(guān)于Go中Channel發(fā)送和接收操作的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • go-zero熔斷機(jī)制組件Breaker接口定義使用解析

    go-zero熔斷機(jī)制組件Breaker接口定義使用解析

    這篇文章主要為大家介紹了go-zero熔斷機(jī)制組件Breaker接口定義使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Go 實(shí)現(xiàn)百萬(wàn)WebSocket連接的方法示例

    Go 實(shí)現(xiàn)百萬(wàn)WebSocket連接的方法示例

    這篇文章主要介紹了Go 實(shí)現(xiàn)百萬(wàn)WebSocket連接的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Go中如何使用set的方法示例

    Go中如何使用set的方法示例

    這篇文章主要介紹了Go中如何使用set的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • omitempty在go中的使用方式

    omitempty在go中的使用方式

    在Go語(yǔ)言編程中,`omitempty`標(biāo)記用于JSON編解碼過(guò)程中控制字段是否被包含,當(dāng)結(jié)構(gòu)體字段標(biāo)記為`omitempty`且字段值為空時(shí),該字段不會(huì)出現(xiàn)在生成的JSON中,有助于優(yōu)化JSON結(jié)構(gòu)和減小數(shù)據(jù)體積,通過(guò)具體示例解釋了`omitempty`的工作機(jī)制和實(shí)際效果
    2024-09-09
  • 全面解析Go語(yǔ)言中crypto/sha1庫(kù)

    全面解析Go語(yǔ)言中crypto/sha1庫(kù)

    crypto/sha1在Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中是一個(gè)強(qiáng)大且實(shí)用的工具,適用于多種應(yīng)用場(chǎng)景,本文就詳細(xì)的介紹了Go語(yǔ)言中crypto/sha1庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Go語(yǔ)言數(shù)據(jù)類型簡(jiǎn)單介紹

    Go語(yǔ)言數(shù)據(jù)類型簡(jiǎn)單介紹

    這篇文章主要介紹了Go語(yǔ)言數(shù)據(jù)類型簡(jiǎn)單介紹的相關(guān)資料,需要的朋友可以參考下
    2023-08-08
  • 淺析Go語(yǔ)言編程當(dāng)中映射和方法的基本使用

    淺析Go語(yǔ)言編程當(dāng)中映射和方法的基本使用

    這篇文章主要介紹了淺析Go語(yǔ)言編程當(dāng)中映射和方法的基本使用,是golang入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Go處理json數(shù)據(jù)方法詳解(Marshal,UnMarshal)

    Go處理json數(shù)據(jù)方法詳解(Marshal,UnMarshal)

    這篇文章主要介紹了Go處理json數(shù)據(jù)的方法詳解,Marshal(),UnMarshal(),需要的朋友可以參考下
    2022-04-04
  • go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析

    go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析

    這篇文章主要為大家介紹了go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論