Skip to content

Commit 4e43fa1

Browse files
Dean KarnDean Karn
authored andcommitted
change field cache to array
- errors now come out in order for unit tests - speed improvement using array vs map benchmark old ns/op new ns/op delta BenchmarkFieldSuccess-8 101 100 -0.99% BenchmarkFieldSuccessParallel-8 33.2 33.7 +1.51% BenchmarkFieldFailure-8 323 332 +2.79% BenchmarkFieldFailureParallel-8 112 113 +0.89% BenchmarkFieldDiveSuccess-8 719 714 -0.70% BenchmarkFieldDiveSuccessParallel-8 230 225 -2.17% BenchmarkFieldDiveFailure-8 1001 987 -1.40% BenchmarkFieldDiveFailureParallel-8 323 317 -1.86% BenchmarkFieldCustomTypeSuccess-8 263 264 +0.38% BenchmarkFieldCustomTypeSuccessParallel-8 82.6 81.4 -1.45% BenchmarkFieldCustomTypeFailure-8 327 328 +0.31% BenchmarkFieldCustomTypeFailureParallel-8 116 116 +0.00% BenchmarkFieldOrTagSuccess-8 871 878 +0.80% BenchmarkFieldOrTagSuccessParallel-8 394 402 +2.03% BenchmarkFieldOrTagFailure-8 568 569 +0.18% BenchmarkFieldOrTagFailureParallel-8 397 401 +1.01% BenchmarkStructLevelValidationSuccess-8 332 267 -19.58% BenchmarkStructLevelValidationSuccessParallel-8 105 82.4 -21.52% BenchmarkStructLevelValidationFailure-8 637 557 -12.56% BenchmarkStructLevelValidationFailureParallel-8 260 226 -13.08% BenchmarkStructSimpleCustomTypeSuccess-8 525 452 -13.90% BenchmarkStructSimpleCustomTypeSuccessParallel-8 155 144 -7.10% BenchmarkStructSimpleCustomTypeFailure-8 828 738 -10.87% BenchmarkStructSimpleCustomTypeFailureParallel-8 345 285 -17.39% BenchmarkStructFilteredSuccess-8 744 664 -10.75% BenchmarkStructFilteredSuccessParallel-8 274 257 -6.20% BenchmarkStructFilteredFailure-8 595 517 -13.11% BenchmarkStructFilteredFailureParallel-8 250 195 -22.00% BenchmarkStructPartialSuccess-8 674 608 -9.79% BenchmarkStructPartialSuccessParallel-8 256 225 -12.11% BenchmarkStructPartialFailure-8 928 848 -8.62% BenchmarkStructPartialFailureParallel-8 399 360 -9.77% BenchmarkStructExceptSuccess-8 1076 934 -13.20% BenchmarkStructExceptSuccessParallel-8 237 200 -15.61% BenchmarkStructExceptFailure-8 873 787 -9.85% BenchmarkStructExceptFailureParallel-8 365 333 -8.77% BenchmarkStructSimpleCrossFieldSuccess-8 539 489 -9.28% BenchmarkStructSimpleCrossFieldSuccessParallel-8 201 168 -16.42% BenchmarkStructSimpleCrossFieldFailure-8 788 709 -10.03% BenchmarkStructSimpleCrossFieldFailureParallel-8 322 299 -7.14% BenchmarkStructSimpleCrossStructCrossFieldSuccess-8 795 683 -14.09% BenchmarkStructSimpleCrossStructCrossFieldSuccessParallel-8 241 211 -12.45% BenchmarkStructSimpleCrossStructCrossFieldFailure-8 1110 940 -15.32% BenchmarkStructSimpleCrossStructCrossFieldFailureParallel-8 399 333 -16.54% BenchmarkStructSimpleSuccess-8 367 285 -22.34% BenchmarkStructSimpleSuccessParallel-8 108 91.0 -15.74% BenchmarkStructSimpleFailure-8 776 698 -10.05% BenchmarkStructSimpleFailureParallel-8 307 284 -7.49% BenchmarkStructComplexSuccess-8 2224 1622 -27.07% BenchmarkStructComplexSuccessParallel-8 718 526 -26.74% BenchmarkStructComplexFailure-8 5350 4717 -11.83% BenchmarkStructComplexFailureParallel-8 2097 1853 -11.64%
1 parent 493dfb6 commit 4e43fa1

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Package validator
22
================
33
<img align="right" src="https://raw.githubusercontent.com/go-playground/validator/v9/logo.png">
44
[![Join the chat at https://gitter.im/go-playground/validator](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-playground/validator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
5-
![Project status](https://img.shields.io/badge/version-9.2.1-green.svg)
5+
![Project status](https://img.shields.io/badge/version-9.2.2-green.svg)
66
[![Build Status](https://semaphoreci.com/api/v1/joeybloggs/validator/branches/v9/badge.svg)](https://semaphoreci.com/joeybloggs/validator)
77
[![Coverage Status](https://coveralls.io/repos/go-playground/validator/badge.svg?branch=v9&service=github)](https://coveralls.io/github/go-playground/validator?branch=v9)
88
[![Go Report Card](https://goreportcard.com/badge/github.com/go-playground/validator)](https://goreportcard.com/report/github.com/go-playground/validator)

cache.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (tc *tagCache) Set(key string, value *cTag) {
7070

7171
type cStruct struct {
7272
name string
73-
fields map[int]*cField
73+
fields []*cField
7474
fn StructLevelFunc
7575
}
7676

@@ -108,7 +108,7 @@ func (v *Validate) extractStructCache(current reflect.Value, sName string) *cStr
108108
return cs
109109
}
110110

111-
cs = &cStruct{name: sName, fields: make(map[int]*cField), fn: v.structLevelFuncs[typ]}
111+
cs = &cStruct{name: sName, fields: make([]*cField, 0), fn: v.structLevelFuncs[typ]}
112112

113113
numFields := current.NumField()
114114

@@ -153,13 +153,13 @@ func (v *Validate) extractStructCache(current reflect.Value, sName string) *cStr
153153
ctag = new(cTag)
154154
}
155155

156-
cs.fields[i] = &cField{
156+
cs.fields = append(cs.fields, &cField{
157157
idx: i,
158158
name: fld.Name,
159159
altName: customName,
160160
cTags: ctag,
161161
namesEqual: fld.Name == customName,
162-
}
162+
})
163163
}
164164

165165
v.structCache.Set(typ, cs)

validator.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ func (v *validate) validateStruct(parent reflect.Value, current reflect.Value, t
5353
// so if nil or if not nil and the structonly tag isn't present
5454
if ct == nil || ct.typeof != typeStructOnly {
5555

56-
for _, f := range cs.fields {
56+
var f *cField
57+
58+
for i := 0; i < len(cs.fields); i++ {
59+
60+
f = cs.fields[i]
5761

5862
if v.isPartial {
5963

0 commit comments

Comments
 (0)