@@ -76,9 +76,9 @@ type GlobalOption struct {
76
76
//
77
77
// tag: default TODO
78
78
DefaultTag string
79
- // StopOnError If true: An error occurs, it will cease to continue to verify
79
+ // StopOnError If true: An error occurs, it will cease to continue to verify. default is True.
80
80
StopOnError bool
81
- // SkipOnEmpty Skip check on field not exist or value is empty
81
+ // SkipOnEmpty Skip check on field not exist or value is empty. default is True.
82
82
SkipOnEmpty bool
83
83
// UpdateSource Whether to update source field value, useful for struct validate
84
84
UpdateSource bool
@@ -142,18 +142,34 @@ func newGlobalOption() *GlobalOption {
142
142
}
143
143
}
144
144
145
+ // pool for validation instance
146
+ // var vPool = &sync.Pool{
147
+ // New: func() any {
148
+ // return newEmpty()
149
+ // },
150
+ // }
151
+
145
152
func newValidation (data DataFace ) * Validation {
153
+ // v := vPool.Get().(*Validation)
154
+ // // reset some runtime data
155
+ // v.ResetResult()
156
+ // v.trans = NewTranslator()
157
+
158
+ v := newEmpty ()
159
+ v .data = data
160
+ return v
161
+ }
162
+
163
+ func newEmpty () * Validation {
146
164
v := & Validation {
147
165
Errors : make (Errors ),
148
- // add data source on usage
149
- data : data ,
150
166
// create message translator
151
167
// trans: StdTranslator,
152
168
trans : NewTranslator (),
153
169
// validated data
154
170
safeData : make (map [string ]any ),
155
171
// validator names
156
- validators : make (map [string ]int8 ),
172
+ validators : make (map [string ]int8 , 16 ),
157
173
// filtered data
158
174
filteredData : make (map [string ]any ),
159
175
// default config
@@ -162,7 +178,7 @@ func newValidation(data DataFace) *Validation {
162
178
}
163
179
164
180
// init build in context validator
165
- v . validatorValues = map [string ]reflect.Value {
181
+ ctxValidatorMap : = map [string ]reflect.Value {
166
182
"required" : reflect .ValueOf (v .Required ),
167
183
"requiredIf" : reflect .ValueOf (v .RequiredIf ),
168
184
"requiredUnless" : reflect .ValueOf (v .RequiredUnless ),
@@ -183,22 +199,14 @@ func newValidation(data DataFace) *Validation {
183
199
"inMimeTypes" : reflect .ValueOf (v .InMimeTypes ),
184
200
}
185
201
186
- v .validatorMetas = make (map [string ]* funcMeta )
202
+ v .validatorMetas = make (map [string ]* funcMeta , len ( ctxValidatorMap ) )
187
203
188
- // collect meta info
189
- for n , fv := range v . validatorValues {
190
- v .validators [n ] = 1 // built in
204
+ // make and collect meta info
205
+ for n , fv := range ctxValidatorMap {
206
+ v .validators [n ] = validatorTypeBuiltin
191
207
v .validatorMetas [n ] = newFuncMeta (n , true , fv )
192
208
}
193
209
194
- // v.pool = &sync.Pool{
195
- // New: func() any {
196
- // return &Validation{
197
- // v: v,
198
- // }
199
- // },
200
- // }
201
-
202
210
return v
203
211
}
204
212
@@ -207,11 +215,12 @@ func newValidation(data DataFace) *Validation {
207
215
*************************************************************/
208
216
209
217
// New create a Validation instance
210
- // data support:
211
- // - DataFace
212
- // - M/map[string]any
213
- // - SValues/url.Values/map[string][]string
214
- // - struct ptr
218
+ //
219
+ // data type support:
220
+ // - DataFace
221
+ // - M/map[string]any
222
+ // - SValues/url.Values/map[string][]string
223
+ // - struct ptr
215
224
func New (data any , scene ... string ) * Validation {
216
225
switch td := data .(type ) {
217
226
case DataFace :
@@ -231,7 +240,7 @@ func New(data any, scene ...string) *Validation {
231
240
return Struct (data , scene ... )
232
241
}
233
242
234
- // NewWithOptions new Validation with options
243
+ // NewWithOptions new Validation with options TODO
235
244
// func NewWithOptions(data any, fn func(opt *GlobalOption)) *Validation {
236
245
// fn(gOpt)
237
246
// return New(data)
0 commit comments