@@ -286,11 +286,15 @@ func (vm *VM) registerStructLocked(structType reflect.Type) (*structVM, error) {
286286 var sub * structVM
287287 for i := 0 ; i < numField ; i ++ {
288288 structField = structType .Field (i )
289- field , err := s .newFieldVM (structField )
289+ field , ok , err := s .newFieldVM (structField )
290290 if err != nil {
291291 s .err = err
292292 return nil , err
293293 }
294+ // skip omited tag
295+ if ! ok {
296+ continue
297+ }
294298 switch field .elemKind {
295299 default :
296300 field .setUnsupportGetter ()
@@ -410,16 +414,20 @@ func (vm *VM) newStructVM() *structVM {
410414 }
411415}
412416
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+ }
414422 f := & fieldVM {
415423 structField : structField ,
416424 exprs : make (map [string ]* Expr , 8 ),
417425 origin : s ,
418426 fieldSelector : structField .Name ,
419427 }
420- err := f .parseExprs (structField . Tag . Get ( s . vm . tagName ) )
428+ err := f .parseExprs (tag )
421429 if err != nil {
422- return nil , err
430+ return nil , false , err
423431 }
424432 s .fields [f .fieldSelector ] = f
425433 s .fieldSelectorList = append (s .fieldSelectorList , f .fieldSelector )
@@ -450,7 +458,7 @@ func (s *structVM) newFieldVM(structField reflect.StructField) (*fieldVM, error)
450458 return v
451459 }
452460
453- return f , nil
461+ return f , true , nil
454462}
455463
456464func (f * fieldVM ) ensureInit (v reflect.Value ) {
0 commit comments