1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-16 18:52:27 +08:00

feat: add DeepClone

This commit is contained in:
dudaodong
2023-02-16 11:50:11 +08:00
parent 0bd675340f
commit 215b79140d
3 changed files with 275 additions and 0 deletions

View File

@@ -262,3 +262,17 @@ func DecodeByte(data []byte, target interface{}) error {
decoder := gob.NewDecoder(buffer)
return decoder.Decode(target)
}
// DeepClone creates a deep copy of passed item.
// can't clone unexported field of struct
func DeepClone(src interface{}) interface{} {
c := cloner{
ptrs: map[reflect.Type]map[uintptr]reflect.Value{},
}
result := c.clone(reflect.ValueOf(src))
if result.Kind() == reflect.Invalid {
return nil
}
return result.Interface()
}