最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang之數(shù)據(jù)校驗的實現(xiàn)代碼示例

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

目前大都是使用 validator

安裝

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

原理

當然只能通過反射來實現(xiàn)了,之前寫過一篇反射的文章 golang之反射和斷言 ,里面有寫到怎么通過反射獲取struct tag。

讀取struct tag之后就是對里面的標識符進行識別,然后進行驗證了。具體可以去看源碼。

demo

簡單使用:

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

幾個例子:

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"`
}

自定義驗證函數(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"`
}
// 自定義驗證函數(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()
  //注冊自定義函數(shù),與struct tag關(guān)聯(lián)起來
 err := validate.RegisterValidation("checkName", checkName)
 user := &UserInfo{
  Name:   "我是中國人,我愛自己的祖國",
  Number:   23,
 }
 err = validate.Struct(user)
 if err != nil {
  for _, err := range err.(validator.ValidationErrors) {
   fmt.Println(err)
  }
  return
 }
 fmt.Println("success")
}

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

相關(guān)文章

  • Go語言常用字符串處理方法實例匯總

    Go語言常用字符串處理方法實例匯總

    這篇文章主要介紹了Go語言常用字符串處理方法,實例匯總了Go語言中常見的各種字符串處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法

    在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法

    這篇文章主要介紹了在ubuntu下構(gòu)建go語言開發(fā)環(huán)境的方法,需要的朋友可以參考下
    2014-10-10
  • Golang中map的深入探究

    Golang中map的深入探究

    Go中Map是一個KV對集合,下面這篇文章主要給大家介紹了關(guān)于Golang中map探究的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-09-09
  • Golang配置解析神器go?viper使用詳解

    Golang配置解析神器go?viper使用詳解

    viper是一個很完善的Go項目配置解決方案,很多著名的開源項目都在使用,比如Hugo,Docker都使用了該庫,使用viper可以讓我們專注于自己的項目代碼,而不用自己寫那些配置解析代碼,本文給大家介紹Golang配置解析神器go?viper使用,感興趣的朋友一起看看吧
    2022-05-05
  • golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段

    這篇文章主要介紹了golang 實現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • golang簡單tls協(xié)議用法完整示例

    golang簡單tls協(xié)議用法完整示例

    這篇文章主要介紹了golang簡單tls用法,分析了tls協(xié)議的使用步驟及客戶端與服務(wù)器端的相關(guān)實現(xiàn)代碼,需要的朋友可以參考下
    2016-07-07
  • go語言生成隨機數(shù)和隨機字符串的實現(xiàn)方法

    go語言生成隨機數(shù)和隨機字符串的實現(xiàn)方法

    隨機數(shù)在很多時候都可以用到,尤其是登錄時,本文就詳細的介紹一下go語言生成隨機數(shù)和隨機字符串的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • Go語言結(jié)構(gòu)化日志slog的用法解析

    Go語言結(jié)構(gòu)化日志slog的用法解析

    go?1.21.0?版本引入了一個新的包?log/slog,該包提供了結(jié)構(gòu)化日志的功能,本文小編就來和大家聊聊log/slog?包的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • go語言實現(xiàn)AES加密的方法

    go語言實現(xiàn)AES加密的方法

    這篇文章主要介紹了go語言實現(xiàn)AES加密的方法,實例分析了Go語言的加密技巧,需要的朋友可以參考下
    2015-03-03
  • Go語言計算兩個經(jīng)度和緯度之間距離的方法

    Go語言計算兩個經(jīng)度和緯度之間距離的方法

    這篇文章主要介紹了Go語言計算兩個經(jīng)度和緯度之間距離的方法,涉及Go語言相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

平原县| 稻城县| 彭山县| 白水县| 忻州市| 阿拉善盟| 松江区| 文安县| 仁布县| 广州市| 五常市| 申扎县| 利辛县| 区。| 饶平县| 鄂托克旗| 虎林市| 和林格尔县| 呼和浩特市| 玉屏| 沾化县| 东台市| 纳雍县| 晋城| 自贡市| 岢岚县| 凌云县| 旌德县| 全州县| 峨边| 永嘉县| 九江县| 眉山市| 民丰县| 靖宇县| 湖北省| 镇远县| 阿拉尔市| 顺平县| 台安县| 翁牛特旗|