@@ -270,10 +270,14 @@ func getMapping(t reflect.Type, tagName string, mapFunc, tagMapFunc func(string)
270270 // pop the first item off of the queue
271271 tq := queue [0 ]
272272 queue = queue [1 :]
273- tq .fi .Children = make ([]* FieldInfo , tq .t .NumField ())
273+ nChildren := 0
274+ if tq .t .Kind () == reflect .Struct {
275+ nChildren = tq .t .NumField ()
276+ }
277+ tq .fi .Children = make ([]* FieldInfo , nChildren )
274278
275279 // iterate through all of its fields
276- for fieldPos := 0 ; fieldPos < tq . t . NumField () ; fieldPos ++ {
280+ for fieldPos := 0 ; fieldPos < nChildren ; fieldPos ++ {
277281 f := tq .t .Field (fieldPos )
278282
279283 fi := FieldInfo {}
@@ -335,7 +339,12 @@ func getMapping(t reflect.Type, tagName string, mapFunc, tagMapFunc func(string)
335339
336340 fi .Embedded = true
337341 fi .Index = apnd (tq .fi .Index , fieldPos )
338- fi .Children = make ([]* FieldInfo , Deref (f .Type ).NumField ())
342+ nChildren := 0
343+ ft := Deref (f .Type )
344+ if ft .Kind () == reflect .Struct {
345+ nChildren = ft .NumField ()
346+ }
347+ fi .Children = make ([]* FieldInfo , nChildren )
339348 queue = append (queue , typeQueue {Deref (f .Type ), & fi , pp })
340349 } else if fi .Zero .Kind () == reflect .Struct || (fi .Zero .Kind () == reflect .Ptr && fi .Zero .Type ().Elem ().Kind () == reflect .Struct ) {
341350 fi .Index = apnd (tq .fi .Index , fieldPos )
0 commit comments