diff --git a/reflect.go b/reflect.go index 3c39137..31a1201 100644 --- a/reflect.go +++ b/reflect.go @@ -26,7 +26,9 @@ func (star *StarRows) setAllRefValue(stc interface{}, skey string, rows int) err tp := t.Field(i) srFrd := v.Field(i) seg := tp.Tag.Get(skey) - + if seg == "" && !tp.IsExported() { + continue + } if srFrd.Kind() == reflect.Ptr && reflect.TypeOf(srFrd.Interface()).Elem().Kind() == reflect.Struct { if seg == "" { continue @@ -49,9 +51,6 @@ func (star *StarRows) setAllRefValue(stc interface{}, skey string, rows int) err continue } } - if seg == "" { - continue - } if _, ok := star.Row(rows).columnref[seg]; !ok { continue } @@ -83,7 +82,7 @@ func (star *StarRows) setAllRefValue(stc interface{}, skey string, rows int) err case reflect.Float32: v.Field(i).SetFloat(float64(star.Row(rows).MustFloat32(seg))) case reflect.Slice, reflect.Array: - if v.Field(i).Elem().Kind() == reflect.Uint8 { + if t.Field(i).Type.Elem().Kind() == reflect.Uint8 { v.Field(i).SetBytes(star.Row(rows).MustBytes(seg)) } case reflect.Interface, reflect.Struct, reflect.Ptr: @@ -138,6 +137,9 @@ func getAllRefValue(stc interface{}, skey string) (map[string]interface{}, error tp := t.Field(i) srFrd := v.Field(i) seg := tp.Tag.Get(skey) + if seg == "" && !tp.IsExported() { + continue + } if srFrd.Kind() == reflect.Ptr && reflect.TypeOf(srFrd.Interface()).Elem().Kind() == reflect.Struct { if srFrd.IsNil() { continue @@ -196,6 +198,9 @@ func getAllRefKey(stc interface{}, skey string) ([]string, error) { srFrd := v.Field(i) profile := t.Field(i) seg := profile.Tag.Get(skey) + if seg == "" && !profile.IsExported() { + continue + } if srFrd.Kind() == reflect.Ptr && reflect.TypeOf(srFrd.Interface()).Elem().Kind() == reflect.Struct { if srFrd.IsNil() { continue