【Go】Validator 網絡請求數據驗證包

背景介紹

validator 是提供了比較強大的,可支持定製化的數據驗證規則的包,它提供了很方便的方法及驗證規則來驗證傳入的 HTTP 請求數據,可以一次定義多次使用,非常優雅地解決了數據驗證雜亂問題,有利於拆解業務代碼中的數據驗證相關代碼,這樣整個控制器中的代碼看起來比較整潔便於閱讀。

快速使用

  1. 執行 go get github.com/go-playground/validator/v10 以安裝包。

  2. 把包導入到需要使用的項目文件中。

  3. 構造驗證規則。

package main

import (
 "fmt"
 "github.com/go-playground/validator/v10"
)

// 用戶信息
type User struct {
 Name      string     `validate:"required"`
 Age       uint8      `validate:"gte=0,lte=130"`
 Email     string     `validate:"required,email"`
 Phone     int64      `validate:"required,number"`
 Addresses []*Address `validate:"required,dive,required"`
}

// 用戶地址信息
type Address struct {
 Street string `validate:"required"`
 City   string `validate:"required"`
 Phone  string `validate:"required"`
}

// 用 Validate 的單個實例來緩存結構體信息
var validate *validator.Validate


func main() {
 //創建一個示例
 validate = validator.New()

 address := &Address{
  Street: "Lujiazui No.21 ",
  City:   "Shanghai",
  Phone:  "021-7777777",
 }

 user := &User{
  Name:      "Aklman",
  Age:       135,
  Email:     "aklman888@gmail.com",
  Phone:     17702177888,
  Addresses: []*Address{address},
 }
 //驗證結構體
 validateStruct(user)
 //單一驗證變量
 validateVariable()
}

//複雜結構數據的驗證
func validateStruct(user *User) {
 err := validate.Struct(user)
 if err != nil {
  if _, ok := err.(*validator.InvalidValidationError); ok {
   fmt.Println(err)
   return
  }

  for _, err := range err.(validator.ValidationErrors) {

   fmt.Println(err.Namespace())
   fmt.Println(err.Field())
   fmt.Println(err.StructNamespace())
   fmt.Println(err.StructField())
   fmt.Println(err.Tag())
   fmt.Println(err.ActualTag())
   fmt.Println(err.Kind())
   fmt.Println(err.Type())
   fmt.Println(err.Value())
   fmt.Println(err.Param())
   fmt.Println()
  }
  return
 }

 // 執行下一步操作
}

//單一結構體的數據驗證
func validateVariable() {
 myEmail := "aklman888@gmail.com"

 errs := validate.Var(myEmail, "required,email")

 if errs != nil {
  fmt.Println(errs)
  return
 }
}

基本數據驗證規則符號

0. 比較運算符

yiDrmv

1. 字段驗證運算

lO4WhQ

2. 網絡字段驗證運算

tTtNak

3. 字符串驗證運算

8PZv2p

4. 數據格式驗證運算

ITmotR

5. 其他驗證運算

p1nxfw

總結

validator 好用之處是一次寫就可以多次使用無需寫繁瑣代碼來進行數據驗證,通常驗證規則單獨拿出來放在一個包中,需要時直接調用,不用在業務邏輯代碼中驗證。

** 參考資料**

  1. GitHub README(https://github.com/go-playground/validator/blob/master/README.md)

  2. pkg.go.dev validator(https://pkg.go.dev/github.com/go-playground/validator#readme-package-validator)

還想了解更多嗎?


更多請查看:https://github.com/go-playground/validator

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_CCpSNLMikPDDvzRnPfB7A