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) }