ユーザ用ツール

サイト用ツール


golang:validator

validator

go-playground/validator

使い方

package main
 
import (
	"fmt"
	"time"
 
	"github.com/go-playground/validator/v10"
)
 
type Plan struct {
	From  time.Time `validate:"required"` // required は 必須項目
	To    time.Time `validate:"required,gtefield=From"`  // gtefield=From は Fromより大きい値であること
	Rank  string    `validate:"required,oneof='A' 'B' 'C'"` // oneof='A' 'B' 'C' は A B Cいずれかの値であること
	Point int       `validate:"required,point_and_rank"` // point_and_rank は 独自のバリデータ
}
 
func main() {
	p := &Plan{
		From:  time.Date(2022, time.November, 10, 0, 0, 0, 0, time.Local),
		To:    time.Date(2022, time.November, 11, 0, 0, 0, 0, time.Local),
		Rank:  "A",
		Point: 101,
	}
 
	// バリデータを作成
	v := validator.New()
	// 独自のバリデータを設定
	v.RegisterValidation("point_and_rank", func(fl validator.FieldLevel) bool {
		value := fl.Field().Int()
		rank := fl.Parent().FieldByName("Rank").String()
		switch rank {
		case "A":
			return value > 100
		case "B":
			return value > 20
		}
		return true
	})
	// 構造体のバリデーションを実行し、バリデーションエラーを取得
	err := v.Struct(p)
	if vErrs, ok := err.(validator.ValidationErrors); ok {
		for i, vErr := range vErrs {
			fmt.Printf("%d -- %#v\n\n", i, vErr)
		}
	}
}
golang/validator.txt · 最終更新: 2022/11/25 08:12 by nullpon