php Xiaobian Yuzai brings you a practical development tool - a universal custom validator in the Go Gin framework. As a high-performance web framework, Go Gin provides a powerful validator function to help developers ensure the legality and integrity of data when processing user input. Universal custom validators can customize various validation rules according to development needs, simplify the code writing process, and improve development efficiency. This article will introduce in detail how to create a universal custom validator, and explain its usage and precautions. Whether you are a beginner or an experienced developer, you will benefit greatly from it. Let’s explore the universal custom validators in the Go Gin framework!
I am using go gin to create api in my project. I needed to create a custom validator, so I created something like this:
var valueone validator.func = func(fl validator.fieldlevel) bool { value, ok := fl.field() if ok { if value != "one" { return true } } return true } var valuetwo validator.func = func(fl validator.fieldlevel) bool { value, ok := fl.field() if ok { if value != "two" { return true } } return true } ....
Is there a way to create a single validator that is more generic and can be used in both cases, instead of creating almost the same custom validator multiple times, like:
var value validator.Func = func(fl validator.FieldLevel, param) bool { value, ok := fl.Field() if ok { if value != param { return true } } return true }
I can't find a way to pass parameters to custom validators in Gin or any other possible way to make these generic validators. I need to create thousands of almost similar validators but I don't want to create custom validators for each validator.
You cannot change the function structure because this is the way it is defined in the package.
// func accepts a fieldlevel interface for all validation needs. the return // value should be true when validation succeeds. type func func(fl fieldlevel) bool
Instead, we can try to use parameters to customize the validation tag
See examples below
package main import ( "github.com/go-playground/validator" ) type Data struct { One string `json:"one" validate:"custom_validation=one"` Two string `json:"two" validate:"custom_validation=two"` } var validate *validator.Validate func main() { validate = validator.New() err := validate.RegisterValidation("custom_validation", func(fl validator.FieldLevel) bool { value := fl.Field() param := fl.Param() return value.String() == param }) if err != nil { panic(err) } // this will succeed { data := &Data{ One: "one", Two: "two", } err = validate.Struct(data) if err != nil { panic(err) } } // it will fail here { data := &Data{ Two: "one", One: "two", } err = validate.Struct(data) if err != nil { panic(err) } } }
See more examples here
Note: golang does not support! ==
The above is the detailed content of Go Gin: Create a generic custom validator. For more information, please follow other related articles on the PHP Chinese website!