github go-playground/validator v9.0.0RC1
Release 9.0.0 RC1

latest releases: v10.20.0, v10.19.0, v10.18.0...
7 years ago

v9.0.0 RC1 has been released!

I will compile a detailed list of changes once the final version is released but for now, here's a taste:

  • can register any custom tag name function instead of before having to specify the name of the tag...
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
    name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]

    if name == "-" {
        return ""
    }

    return name
})
  • Validation function + Struct Level validation function signatures have changed to use interface and should be infinity easier to remember and implement:
// field level validation func
type Func func(fl FieldLevel) bool

// struct level validation func
type StructLevelFunc func(sl StructLevel)
  • change name for validating individual fields, I think that some people were associating validation using Field or FieldWithValue to a struct field only, but that is not the case, any variable can be validated and so the functions have been changed to:
var age int

err := validate.Var(age, "gte=0,lte=130")

var parentsAge int

err := validate.VarWithValue(age, parentsAge, "ltcsfield")

// side note: reason validator doesn't have strict sanitizers like IsEmail(..) bool is so many validation can be run  on a field in one run eg.

var settings []string

// this will validate that settings exists, there is at least one entry in array 
// and that each string within the array is set...
validate.Var(settings, "required,gte=1,dive,required")

and now the ones everyone has been waiting for, benchmarks... overall improvements and some balancing between success and failure has been made because it's not just how fast it is when everything succeeds, but also when errors need to be reported.

benchmark                                               old ns/op     new ns/op     delta
BenchmarkFieldSuccess-8                                 118           147           +24.58%
BenchmarkFieldFailure-8                                 758           417           -44.99%
BenchmarkFieldDiveSuccess-8                             2471          876           -64.55%
BenchmarkFieldDiveFailure-8                             3172          1185          -62.64%
BenchmarkFieldCustomTypeSuccess-8                       300           321           +7.00%
BenchmarkFieldCustomTypeFailure-8                       775           416           -46.32%
BenchmarkFieldOrTagSuccess-8                            1122          1119          -0.27%
BenchmarkFieldOrTagFailure-8                            1167          715           -38.73%
BenchmarkStructLevelValidationSuccess-8                 548           399           -27.19%
BenchmarkStructLevelValidationFailure-8                 558           749           +34.23%
BenchmarkStructSimpleCustomTypeSuccess-8                623           673           +8.03%
BenchmarkStructSimpleCustomTypeFailure-8                1381          1056          -23.53%
BenchmarkStructPartialSuccess-8                         1036          789           -23.84%
BenchmarkStructPartialFailure-8                         1734          1105          -36.27%
BenchmarkStructExceptSuccess-8                          888           1212          +36.49%
BenchmarkStructExceptFailure-8                          1036          1004          -3.09%
BenchmarkStructSimpleCrossFieldSuccess-8                773           656           -15.14%
BenchmarkStructSimpleCrossFieldFailure-8                1487          968           -34.90%
BenchmarkStructSimpleCrossStructCrossFieldSuccess-8     1261          1000          -20.70%
BenchmarkStructSimpleCrossStructCrossFieldFailure-8     2055          1324          -35.57%
BenchmarkStructSimpleSuccess-8                          519           534           +2.89%
BenchmarkStructSimpleFailure-8                          1429          1039          -27.29%
BenchmarkStructSimpleSuccessParallel-8                  146           144           -1.37%
BenchmarkStructSimpleFailureParallel-8                  551           419           -23.96%
BenchmarkStructComplexSuccess-8                         3269          2678          -18.08%
BenchmarkStructComplexFailure-8                         8436          6342          -24.82%
BenchmarkStructComplexSuccessParallel-8                 1024          874           -14.65%
BenchmarkStructComplexFailureParallel-8                 3536          2875          -18.69%

benchmark                                               old allocs     new allocs     delta
BenchmarkFieldSuccess-8                                 0              0              +0.00%
BenchmarkFieldFailure-8                                 4              4              +0.00%
BenchmarkFieldDiveSuccess-8                             28             11             -60.71%
BenchmarkFieldDiveFailure-8                             32             16             -50.00%
BenchmarkFieldCustomTypeSuccess-8                       2              2              +0.00%
BenchmarkFieldCustomTypeFailure-8                       4              4              +0.00%
BenchmarkFieldOrTagSuccess-8                            1              1              +0.00%
BenchmarkFieldOrTagFailure-8                            6              5              -16.67%
BenchmarkStructLevelValidationSuccess-8                 5              2              -60.00%
BenchmarkStructLevelValidationFailure-8                 5              8              +60.00%
BenchmarkStructSimpleCustomTypeSuccess-8                3              2              -33.33%
BenchmarkStructSimpleCustomTypeFailure-8                9              9              +0.00%
BenchmarkStructPartialSuccess-8                         9              6              -33.33%
BenchmarkStructPartialFailure-8                         14             11             -21.43%
BenchmarkStructExceptSuccess-8                          7              12             +71.43%
BenchmarkStructExceptFailure-8                          9              10             +11.11%
BenchmarkStructSimpleCrossFieldSuccess-8                4              3              -25.00%
BenchmarkStructSimpleCrossFieldFailure-8                9              8              -11.11%
BenchmarkStructSimpleCrossStructCrossFieldSuccess-8     7              4              -42.86%
BenchmarkStructSimpleCrossStructCrossFieldFailure-8     12             9              -25.00%
BenchmarkStructSimpleSuccess-8                          1              0              -100.00%
BenchmarkStructSimpleFailure-8                          9              9              +0.00%
BenchmarkStructSimpleSuccessParallel-8                  1              0              -100.00%
BenchmarkStructSimpleFailureParallel-8                  9              9              +0.00%
BenchmarkStructComplexSuccess-8                         15             8              -46.67%
BenchmarkStructComplexFailure-8                         60             53             -11.67%
BenchmarkStructComplexSuccessParallel-8                 15             8              -46.67%
BenchmarkStructComplexFailureParallel-8                 60             53             -11.67%

benchmark                                               old bytes     new bytes     delta
BenchmarkFieldSuccess-8                                 0             0             +0.00%
BenchmarkFieldFailure-8                                 432           192           -55.56%
BenchmarkFieldDiveSuccess-8                             464           201           -56.68%
BenchmarkFieldDiveFailure-8                             896           396           -55.80%
BenchmarkFieldCustomTypeSuccess-8                       32            32            +0.00%
BenchmarkFieldCustomTypeFailure-8                       432           192           -55.56%
BenchmarkFieldOrTagSuccess-8                            4             16            +300.00%
BenchmarkFieldOrTagFailure-8                            448           208           -53.57%
BenchmarkStructLevelValidationSuccess-8                 160           32            -80.00%
BenchmarkStructLevelValidationFailure-8                 160           288           +80.00%
BenchmarkStructSimpleCustomTypeSuccess-8                36            32            -11.11%
BenchmarkStructSimpleCustomTypeFailure-8                640           392           -38.75%
BenchmarkStructPartialSuccess-8                         272           256           -5.88%
BenchmarkStructPartialFailure-8                         730           464           -36.44%
BenchmarkStructExceptSuccess-8                          250           480           +92.00%
BenchmarkStructExceptFailure-8                          272           448           +64.71%
BenchmarkStructSimpleCrossFieldSuccess-8                80            72            -10.00%
BenchmarkStructSimpleCrossFieldFailure-8                536           288           -46.27%
BenchmarkStructSimpleCrossStructCrossFieldSuccess-8     112           80            -28.57%
BenchmarkStructSimpleCrossStructCrossFieldFailure-8     576           304           -47.22%
BenchmarkStructSimpleSuccess-8                          4             0             -100.00%
BenchmarkStructSimpleFailure-8                          640           392           -38.75%
BenchmarkStructSimpleSuccessParallel-8                  4             0             -100.00%
BenchmarkStructSimpleFailureParallel-8                  640           392           -38.75%
BenchmarkStructComplexSuccess-8                         244           128           -47.54%
BenchmarkStructComplexFailure-8                         3609          2833          -21.50%
BenchmarkStructComplexSuccessParallel-8                 244           128           -47.54%
BenchmarkStructComplexFailureParallel-8                 3609          2833          -21.50%

Don't miss a new validator release

NewReleases is sending notifications on new releases.