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() {