From c5db44d03fdcb01acdc5b25dfb5c0b99b143f002 Mon Sep 17 00:00:00 2001 From: kinggo <1510613524@qq.com> Date: Tue, 12 Oct 2021 21:04:47 +0800 Subject: [PATCH] fixed:panic when create value from nil struct pointer. --- schema/schema.go | 8 +++----- tests/create_test.go | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/schema/schema.go b/schema/schema.go index e58e0eb4..60a434fa 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -78,12 +78,10 @@ func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, error) } value := reflect.ValueOf(dest) - var modelType reflect.Type - if value.IsZero() { - modelType = value.Type() - } else { - modelType = reflect.Indirect(value).Type() + if value.Kind() == reflect.Ptr && value.IsNil() { + value = reflect.New(value.Type().Elem()) } + modelType := reflect.Indirect(value).Type() if modelType.Kind() == reflect.Interface { modelType = reflect.Indirect(reflect.ValueOf(dest)).Elem().Type() diff --git a/tests/create_test.go b/tests/create_test.go index e19ff728..060f78af 100644 --- a/tests/create_test.go +++ b/tests/create_test.go @@ -518,7 +518,7 @@ func TestCreateFromSubQuery(t *testing.T) { } } -func TestNilPointer(t *testing.T) { +func TestCreateNilPointer(t *testing.T) { var user *User err := DB.Create(user).Error