From 2026177412f31a7f81218f134d4b8c37253b5169 Mon Sep 17 00:00:00 2001 From: xutaiping Date: Mon, 12 Dec 2022 21:47:29 +0800 Subject: [PATCH] fix: save reflect err --- errors.go | 2 ++ finisher_api.go | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/errors.go b/errors.go index 49cbfe64..6654d680 100644 --- a/errors.go +++ b/errors.go @@ -41,4 +41,6 @@ var ( ErrInvalidValueOfLength = errors.New("invalid association values, length doesn't match") // ErrPreloadNotAllowed preload is not allowed when count is used ErrPreloadNotAllowed = errors.New("preload is not allowed when count is used") + // ErrReflect err Reflect + ErrReflect = errors.New("reflect err") ) diff --git a/finisher_api.go b/finisher_api.go index b30ca24d..d8b88bd2 100644 --- a/finisher_api.go +++ b/finisher_api.go @@ -75,7 +75,12 @@ func (db *DB) Save(value interface{}) (tx *DB) { reflectValue := reflect.Indirect(reflect.ValueOf(value)) for reflectValue.Kind() == reflect.Ptr || reflectValue.Kind() == reflect.Interface { - reflectValue = reflect.Indirect(reflectValue) + reflectIndirect := reflect.Indirect(reflectValue) + if reflectValue == reflectIndirect { + tx.AddError(ErrReflect) + return + } + reflectValue = reflectIndirect } switch reflectValue.Kind() {