From aed19a5f8179d21a33c536b7b40083a6799cb529 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 8 May 2014 13:24:07 +0800 Subject: [PATCH] add support for ptr to extends struct --- column.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/column.go b/column.go index b4aa5cfd..f600719c 100644 --- a/column.go +++ b/column.go @@ -123,7 +123,21 @@ func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value, error) { } else if len(col.fieldPath) == 2 { parentField := dataStruct.FieldByName(col.fieldPath[0]) if parentField.IsValid() { - fieldValue = parentField.FieldByName(col.fieldPath[1]) + if parentField.Kind() == reflect.Struct { + fieldValue = parentField.FieldByName(col.fieldPath[1]) + } else if parentField.Kind() == reflect.Ptr { + if parentField.IsNil() { + parentField.Set(reflect.New(parentField.Type().Elem())) + fieldValue = parentField.Elem().FieldByName(col.fieldPath[1]) + } else { + parentField = parentField.Elem() + if parentField.IsValid() { + fieldValue = parentField.FieldByName(col.fieldPath[1]) + } else { + err = fmt.Errorf("field %v is not valid", col.FieldName) + } + } + } } else { err = fmt.Errorf("field %v is not valid", col.FieldName) }