@@ -286,11 +286,15 @@ func (vm *VM) registerStructLocked(structType reflect.Type) (*structVM, error) {
286
286
var sub * structVM
287
287
for i := 0 ; i < numField ; i ++ {
288
288
structField = structType .Field (i )
289
- field , err := s .newFieldVM (structField )
289
+ field , ok , err := s .newFieldVM (structField )
290
290
if err != nil {
291
291
s .err = err
292
292
return nil , err
293
293
}
294
+ // skip omited tag
295
+ if ! ok {
296
+ continue
297
+ }
294
298
switch field .elemKind {
295
299
default :
296
300
field .setUnsupportGetter ()
@@ -410,16 +414,20 @@ func (vm *VM) newStructVM() *structVM {
410
414
}
411
415
}
412
416
413
- func (s * structVM ) newFieldVM (structField reflect.StructField ) (* fieldVM , error ) {
417
+ func (s * structVM ) newFieldVM (structField reflect.StructField ) (* fieldVM , bool , error ) {
418
+ var tag = structField .Tag .Get (s .vm .tagName )
419
+ if tag == tagOmit {
420
+ return nil , false , nil
421
+ }
414
422
f := & fieldVM {
415
423
structField : structField ,
416
424
exprs : make (map [string ]* Expr , 8 ),
417
425
origin : s ,
418
426
fieldSelector : structField .Name ,
419
427
}
420
- err := f .parseExprs (structField . Tag . Get ( s . vm . tagName ) )
428
+ err := f .parseExprs (tag )
421
429
if err != nil {
422
- return nil , err
430
+ return nil , false , err
423
431
}
424
432
s .fields [f .fieldSelector ] = f
425
433
s .fieldSelectorList = append (s .fieldSelectorList , f .fieldSelector )
@@ -450,7 +458,7 @@ func (s *structVM) newFieldVM(structField reflect.StructField) (*fieldVM, error)
450
458
return v
451
459
}
452
460
453
- return f , nil
461
+ return f , true , nil
454
462
}
455
463
456
464
func (f * fieldVM ) ensureInit (v reflect.Value ) {
0 commit comments