validator

package
v0.0.0-...-3266887 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 7, 2022 License: Apache-2.0, BSD-2-Clause, BSD-3-Clause, + 2 more Imports: 15 Imported by: 0

README

validator

基于 go-playground/validator/v10 封装的验证包,特性如下:

  • 支持结构体、值验证等必备功能;
  • 支持国际化功能,同时可动态切换语言;
  • 错误信息可根据需要返回切片错误或 map 类型;
  • 支持注册自定义验证函数。

使用方法

基础示例

package main

import (
	"fmt"
	
	go_validator "github.com/go-playground/validator/v10"
	"github.com/marmotedu/iam/pkg/validator"
)

type Data struct {
	Name string `validate:"required,gt=0,lte=4" label:"姓名" label_en:"name"`
	Age  uint   `validate:"required,gte=0,lte=50" label:"年龄" label_en:"age"`
}

func main() {
	opts := &validator.Options{
		Language: "zh",
		Tag:      "label",
	}
	validator.Init(opts)

	d := &Data{
		Age: 66, // 不符合验证规则
	}
	
	if err := validator.Struct(d); err != nil {
		// output: [姓名为必填字段 年龄必须小于或等于50]
		fmt.Println(err.(*validator.ValidationErrors).TranslateErrs())
	}

	d2 := &Data{Name: "tom", Age: 10}
	if err := validator.Struct(d2); err != nil {
		fmt.Println(err.(*validator.ValidationErrors).TranslateErrs())
	} else {
		fmt.Println("success") // output: success
	}
}

国际化

package main

import (
	"fmt"

	go_validator "github.com/go-playground/validator/v10"
	"github.com/marmotedu/iam/pkg/validator"
)

type Data struct {
	Name string `validate:"required,gt=0,lte=4" label:"姓名" label_en:"name"`
	Age  uint   `validate:"required,gte=0,lte=50" label:"年龄" label_en:"age"`
}

func main() {
	d := &Data{
		Name: "jack",
		Age:  51,
	}
	v1 := validator.New("en", "label_en")
	if err := v1.Struct(d); err != nil {
		// output: map[age:age must be 50 or less sex:sex is a required field]
		fmt.Println(err.(*validator.ValidationErrors).TranslateErrsMap())
	}
}

支持动态切换语言

package main

import (
	"fmt"

	go_validator "github.com/go-playground/validator/v10"
	"github.com/marmotedu/iam/pkg/validator"
)

type Data struct {
	Name string `validate:"required,gt=0,lte=4" label:"姓名" label_en:"name"`
	Age  uint   `validate:"required,gte=0,lte=50" label:"年龄" label_en:"age"`
}

func main() {
	d := &Data{
		Name: "jack",
		Age:  51,
	}
	v1 := validator.New("en", "label_en")
	if err := v1.Struct(d); err != nil {
		// output: map[age:age must be 50 or less sex:sex is a required field]
		fmt.Println(err.(*validator.ValidationErrors).TranslateErrsMap())
	}

	if err := v1.WithTranslator("zh").Struct(d); err != nil {
		// output: [age必须小于或等于50 sex为必填字段]
		fmt.Println(err.(*validator.ValidationErrors).TranslateErrs())
	}
}

注册自义验证函数

package main

import (
	"fmt"
	"log"

	go_validator "github.com/go-playground/validator/v10"
	"github.com/marmotedu/iam/pkg/validator"
)


type Data struct {
	Age uint `validate:"required,myValidation,gte=0,lte=50" label:"年龄"`
}

func main() {
	d := &Data{Age: 66}
	v := validator.New("zh", "label")
	// register custom validation.
	if rErr := v.RegisterValidation("myValidation", "{0}真的不能为66", myValidation); rErr != nil {
		log.Fatalln(rErr.Error())
	}
	if err := v.Struct(d); err != nil {
		fmt.Println(err.(*validator.ValidationErrors).TranslateErrs())    // output: [年龄真的不能为66]
		fmt.Println(err.Error())                                          // output: 年龄真的不能为66
		fmt.Println(err.(*validator.ValidationErrors).TranslateErrsMap()) // output: map[年龄:年龄真的不能为66]
	}
}

func myValidation(fl go_validator.FieldLevel) bool {
	if fl.Field().Uint() == 66 {
		return false
	}

	return true
}

Documentation

Overview

Package validator defines iam custom binding validators used by gin.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetValidate

func GetValidate() *validator.Validate

func Init

func Init(opts *Options)

func RegisterValidation

func RegisterValidation(tag, errMsg string, vf Validation) error

RegisterValidation register custom validation func.

func Struct

func Struct(data interface{}) error

func StructCtx

func StructCtx(ctx context.Context, data interface{}) error

func Var

func Var(f interface{}, rule string) error

func VarCtx

func VarCtx(ctx context.Context, f interface{}, rule string) error

Types

type FieldError

type FieldError struct {
	Field   string
	Message string
}

func (*FieldError) Error

func (e *FieldError) Error() string

type Options

type Options struct {
	Language string `json:"language" mapstructure:"language"`
	// Struct field tag
	Tag string `json:"tag" mapstructure:"tag"`
}

func NewOptions

func NewOptions() *Options

func (*Options) AddFlags

func (o *Options) AddFlags(fs *pflag.FlagSet)

type Validation

type Validation func(fl validator.FieldLevel) bool

Validation custom validation func.

type ValidationErrors

type ValidationErrors struct {
	// contains filtered or unexported fields
}

func (*ValidationErrors) Error

func (e *ValidationErrors) Error() string

func (*ValidationErrors) GetValidatorValidationErrors

func (e *ValidationErrors) GetValidatorValidationErrors() validator.ValidationErrors

func (*ValidationErrors) TranslateErrs

func (e *ValidationErrors) TranslateErrs() (errs []error)

func (*ValidationErrors) TranslateErrsMap

func (e *ValidationErrors) TranslateErrsMap() map[string]string

type Validator

type Validator interface {
	Struct(data interface{}) error
	StructCtx(ctx context.Context, data interface{}) error
	Var(f interface{}, rule string) error
	VarCtx(ctx context.Context, f interface{}, rule string) error
	WithTranslator(language string) Validator
	GetValidate() *validator.Validate
	RegisterValidation(tag, errMSg string, vf Validation) error
}

func New

func New(language, tag string) Validator

func WithTranslator

func WithTranslator(language string) Validator

WithTranslator set default translation.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL