From 65cea430c248da31b0fd3119377038769201f3e0 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 16 Jun 2020 19:30:35 +0800 Subject: [PATCH] improva gconv.Struct --- util/gconv/gconv_struct.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/util/gconv/gconv_struct.go b/util/gconv/gconv_struct.go index 34a27253a..14cfe7410 100644 --- a/util/gconv/gconv_struct.go +++ b/util/gconv/gconv_struct.go @@ -244,15 +244,18 @@ func bindVarToStructAttr(elem reflect.Value, name string, value interface{}) (er // bindVarToReflectValue sets to reflect value object . func bindVarToReflectValue(structFieldValue reflect.Value, value interface{}) (err error) { // Converting using interface. - if v, ok := structFieldValue.Interface().(apiSet); ok { - v.Set(value) - return nil - } else if v, ok := structFieldValue.Interface().(apiUnmarshalValue); ok { - err = v.UnmarshalValue(value) - if err == nil { - return err + if !structFieldValue.IsNil() { + if v, ok := structFieldValue.Interface().(apiSet); ok { + v.Set(value) + return nil + } else if v, ok := structFieldValue.Interface().(apiUnmarshalValue); ok { + err = v.UnmarshalValue(value) + if err == nil { + return err + } } } + // Converting by kind. switch structFieldValue.Kind() { case reflect.Struct: