From e371ada36e479577727fd85833ad83a3b5c153ec Mon Sep 17 00:00:00 2001 From: kinggo <1510613524@qq.com> Date: Tue, 12 Oct 2021 20:34:41 +0800 Subject: [PATCH] fixed:create nil pointer --- schema/schema.go | 9 ++++++++- tests/create_test.go | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/schema/schema.go b/schema/schema.go index c425070b..e58e0eb4 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -77,7 +77,14 @@ func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, error) return nil, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest) } - modelType := reflect.Indirect(reflect.ValueOf(dest)).Type() + value := reflect.ValueOf(dest) + var modelType reflect.Type + if value.IsZero() { + modelType = value.Type() + } else { + 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 bd968ea8..e19ff728 100644 --- a/tests/create_test.go +++ b/tests/create_test.go @@ -517,3 +517,12 @@ func TestCreateFromSubQuery(t *testing.T) { t.Errorf("invalid insert SQL, got %v", result.Statement.SQL.String()) } } + +func TestNilPointer(t *testing.T) { + var user *User + + err := DB.Create(user).Error + if err == nil || err != gorm.ErrInvalidValue { + t.Fatalf("it is not ErrInvalidValue") + } +}