亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang之?dāng)?shù)據(jù)校驗(yàn)的實(shí)現(xiàn)代碼示例

 更新時(shí)間:2019年10月16日 09:53:33   作者:aside section  
這篇文章主要介紹了golang之?dāng)?shù)據(jù)校檢的實(shí)現(xiàn)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

目前大都是使用 validator

安裝

go get gopkg.in/go-playground/validator.v9

原理

當(dāng)然只能通過(guò)反射來(lái)實(shí)現(xiàn)了,之前寫(xiě)過(guò)一篇反射的文章 golang之反射和斷言 ,里面有寫(xiě)到怎么通過(guò)反射獲取struct tag。

讀取struct tag之后就是對(duì)里面的標(biāo)識(shí)符進(jìn)行識(shí)別,然后進(jìn)行驗(yàn)證了。具體可以去看源碼。

demo

簡(jiǎn)單使用:

package main

import (
 "fmt"
 "gopkg.in/go-playground/validator.v9"
)

// User contains user information
type UserInfo struct {
 FirstName  string  `validate:"required"`
 LastName  string  `validate:"required"`
 Age   uint8  `validate:"gte=0,lte=100"`
 Email   string  `validate:"required,email"`
}


func main() {
 validate := validator.New()
 user := &UserInfo{
  FirstName:  "Badger",
  LastName:  "Smith",
  Age:   105,
  Email:   "",
 }
 err := validate.Struct(user)
 if err != nil {
  for _, err := range err.(validator.ValidationErrors) {
   fmt.Println(err)
  }
  return
 }
 fmt.Println("success")
}

輸出:

Key: 'UserInfo.Age' Error:Field validation for 'Age' failed on the 'lte' tag
Key: 'UserInfo.Email' Error:Field validation for 'Email' failed on the 'required' tag

其它類型可以參照文檔 https://godoc.org/gopkg.in/go-playground/validator.v9

幾個(gè)例子:

1.IP
type UserInfo struct {
 Ip    string  `validate:"ip"`
}
2.數(shù)字
type UserInfo struct {
 Number float32 `validate:"numeric"`
}
3.最大值
type UserInfo struct {
 Number float32 `validate:"max=10"`
}
4.最小值
type UserInfo struct {
 Number float32 `validate:"min=10"`
}

自定義驗(yàn)證函數(shù)

package main

import (
 "fmt"
 "gopkg.in/go-playground/validator.v9"
 "unicode/utf8"
)

// User contains user information
type UserInfo struct {
 Name   string  `validate:"checkName"`
 Number float32 `validate:"numeric"`
}
// 自定義驗(yàn)證函數(shù)
func checkName(fl validator.FieldLevel) bool {
 count := utf8.RuneCountInString(fl.Field().String())
 fmt.Printf("length: %v \n", count)
 if count > 5 {
  return false
 }
 return true
}

func main() {
 validate := validator.New()
  //注冊(cè)自定義函數(shù),與struct tag關(guān)聯(lián)起來(lái)
 err := validate.RegisterValidation("checkName", checkName)
 user := &UserInfo{
  Name:   "我是中國(guó)人,我愛(ài)自己的祖國(guó)",
  Number:   23,
 }
 err = validate.Struct(user)
 if err != nil {
  for _, err := range err.(validator.ValidationErrors) {
   fmt.Println(err)
  }
  return
 }
 fmt.Println("success")
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文讓你理解go語(yǔ)言的Context

    一文讓你理解go語(yǔ)言的Context

    在Go語(yǔ)言中,Context(上下文)是一個(gè)類型,用于在程序中傳遞請(qǐng)求范圍的值、截止時(shí)間、取消信號(hào)和其他與請(qǐng)求相關(guān)的上下文信息,它在多個(gè)goroutine之間傳遞這些值,使得并發(fā)編程更加可靠和簡(jiǎn)單,本文詳細(xì)介紹go語(yǔ)言的Context,需要的朋友可以參考下
    2023-05-05
  • Go語(yǔ)言select語(yǔ)句用法示例

    Go語(yǔ)言select語(yǔ)句用法示例

    這篇文章主要為大家介紹了Go語(yǔ)言select語(yǔ)句用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例

    使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例

    這篇文章主要為大家介紹了使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • GO將mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf的操作方法

    GO將mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf的操作方法

    這篇文章主要介紹了go如何優(yōu)雅地將?mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf,本文主要展示一下在 protobuf中 float與double的一個(gè)區(qū)別,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 最新版Golang?pprof使用詳解(引入、抓取、分析,圖文結(jié)合)

    最新版Golang?pprof使用詳解(引入、抓取、分析,圖文結(jié)合)

    這篇文章主要介紹了最新版Golang?pprof使用詳解包括引入、抓取、分析,圖文結(jié)合,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • 詳解Golang中Context的原理和使用技巧

    詳解Golang中Context的原理和使用技巧

    Golang?的?Context?包,中文可以稱之為“上下文”,是用來(lái)在?goroutine?協(xié)程之間進(jìn)行上下文信息傳遞的,這些上下文信息包括?kv?數(shù)據(jù)、取消信號(hào)、超時(shí)時(shí)間、截止時(shí)間等。本文主要介紹了Context的原理和使用技巧,希望對(duì)大家有所幫助
    2022-11-11
  • Golang操作MySql數(shù)據(jù)庫(kù)的完整步驟記錄

    Golang操作MySql數(shù)據(jù)庫(kù)的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Golang操作MySql數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Go讀取文件與寫(xiě)入文件的三種方法操作指南

    Go讀取文件與寫(xiě)入文件的三種方法操作指南

    在 Go 語(yǔ)言中也經(jīng)常會(huì)遇到操作文件的需求,下面這篇文章主要給大家介紹了關(guān)于Go讀取文件與寫(xiě)入文件的三種方法操作,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Go并發(fā)編程之goroutine使用正確方法

    Go并發(fā)編程之goroutine使用正確方法

    并發(fā)編程有一種常見(jiàn)方式就是許多工作子協(xié)程都是獨(dú)立的,互不干擾,但他們又是“同一時(shí)間”處理。本文重大給大家介紹Go并發(fā)編程goroutine使用方法,一起看看吧
    2021-09-09
  • 詳解Golang中文件系統(tǒng)事件監(jiān)聽(tīng)

    詳解Golang中文件系統(tǒng)事件監(jiān)聽(tīng)

    文件系統(tǒng)事件是指文件系統(tǒng)相關(guān)的各種操作和狀態(tài)變化,當(dāng)一個(gè)應(yīng)用層的進(jìn)程操作文件或目錄時(shí),會(huì)觸發(fā)system call,內(nèi)核的notification子系統(tǒng)可以守在那里,把該進(jìn)程對(duì)文件的操作上報(bào)給應(yīng)用層的監(jiān)聽(tīng)進(jìn)程,這篇文章主要介紹了Golang之文件系統(tǒng)事件監(jiān)聽(tīng),需要的朋友可以參考下
    2024-01-01

最新評(píng)論