Go语言教程之边写边学:常用的软件库:结构体和字段验证

包验证器根据标签对结构体和单个字段进行值验证。它具有以下独特的功能,可通过使用验证标记或自定义验证器进行跨字段和跨结构验证。切片、数组和map,允许验证多维字段的任何或所有级别。能够深入研究映射键和值以进行验证。

安装验证包:

go get github.com/go-playground/validator

 

示例代码:

package main

import (
	"fmt"

	"github.com/go-playground/validator"
)

// User contains user information
type User struct {
	FirstName   string `json:"fname" validate:"alpha"`
	LastName    string `json:"lname" validate:"alpha"`
	Age         uint8  `validate:"gte=20,lte=65"`
	Email       string `json:"e-mail" validate:"required,email"`
	JoiningDate string `validate:"datetime"`
}

// use a single instance of Validate, it caches struct info
var validate *validator.Validate

func main() {

	validate = validator.New()

	user := &User{
		FirstName:   "Test25",
		LastName:    "Test",
		Age:         75,
		Email:       "Badger.Smith@",
		JoiningDate: "005-25-10",
	}

	err := validate.Struct(user)
	if err != nil {
		if _, ok := err.(*validator.InvalidValidationError); ok {
			fmt.Println(err)
			return
		}

		fmt.Println("------ List of tag fields with error ---------")

		for _, err := range err.(validator.ValidationErrors) {
			fmt.Println(err.StructField())
			fmt.Println(err.ActualTag())
			fmt.Println(err.Kind())
			fmt.Println(err.Value())
			fmt.Println(err.Param())
			fmt.Println("---------------")
		}
		return
	}
}

 

输出:

------ List of tag fields with error ---------
FirstName
alpha
string
Test25

---------------
Age
lte
uint8
75
65
---------------
Email
email
string
Badger.Smith@

---------------
JoiningDate
datetime
string
005-25-10

---------------
  • 当前日期:
  • 北京时间:
  • 时间戳:
  • 今年的第:18周
  • 我的 IP:3.129.218.83
农历
五行
冲煞
彭祖
方位
吉神
凶神
极简任务管理 help
+ 0 0 0
Task Idea Collect