【Go】Validator 網絡請求數據驗證包
背景介紹
validator 是提供了比較強大的,可支持定製化的數據驗證規則的包,它提供了很方便的方法及驗證規則來驗證傳入的 HTTP 請求數據,可以一次定義多次使用,非常優雅地解決了數據驗證雜亂問題,有利於拆解業務代碼中的數據驗證相關代碼,這樣整個控制器中的代碼看起來比較整潔便於閱讀。
快速使用
執行
go get github.com/go-playground/validator/v10
以安裝包。把包導入到需要使用的項目文件中。
構造驗證規則。
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. 比較運算符
1. 字段驗證運算
2. 網絡字段驗證運算
3. 字符串驗證運算
4. 數據格式驗證運算
5. 其他驗證運算
總結
validator 好用之處是一次寫就可以多次使用無需寫繁瑣代碼來進行數據驗證,通常驗證規則單獨拿出來放在一個包中,需要時直接調用,不用在業務邏輯代碼中驗證。
** 參考資料**
-
GitHub README(https://github.com/go-playground/validator/blob/master/README.md)
-
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