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