Skip to content

Commit f9e8bcc

Browse files
author
shuxian
committed
json copy
1 parent bc27893 commit f9e8bcc

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

json/json.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package json
2+
3+
import (
4+
"encoding/json"
5+
"reflect"
6+
)
7+
8+
// Copy makes a new object which has same field key and value from 'src'
9+
func Copy(dst interface{}, src interface{}) (err error) {
10+
11+
if dst == nil || (reflect.ValueOf(dst).Kind() == reflect.Ptr && reflect.ValueOf(dst).IsNil()) {
12+
dst = reflect.New(reflect.TypeOf(dst))
13+
}
14+
if src == nil || (reflect.ValueOf(src).Kind() == reflect.Ptr && reflect.ValueOf(src).IsNil()) {
15+
src = reflect.New(reflect.TypeOf(src))
16+
}
17+
18+
bytes, err := json.Marshal(src)
19+
if err != nil {
20+
return
21+
}
22+
err = json.Unmarshal(bytes, dst)
23+
if err != nil {
24+
return
25+
}
26+
return nil
27+
}

0 commit comments

Comments
 (0)