Add reflect based reset

fix
This commit is contained in:
Nikita Tokarchuk
2019-05-24 14:50:17 +02:00
parent 57fb40693a
commit dad0a0598b
2 changed files with 29 additions and 4 deletions
+27
View File
@@ -0,0 +1,27 @@
package base
import (
"reflect"
"github.com/mainnika/mongox-go-driver/mongox"
)
// Reset function creates new zero object for the target pointer
func Reset(target interface{}) {
resettable, canReset := target.(mongox.Resetter)
if canReset {
resettable.Reset()
return
}
v := reflect.ValueOf(target)
if v.Kind() != reflect.Ptr {
panic("reset target should be a pointer")
}
t := v.Elem().Type()
zero := reflect.Zero(t)
v.Elem().Set(zero)
}