golang数据深拷贝

golang对slice的深拷贝

使用append拷贝

Array := append([]int32{},array...)

使用copy拷贝

Array := make([]int32,len(array))
copy(Array, array)

golang对map深拷贝

valueMap := make(map[string][]int)
slice := []int{1,2,3}
valueMap["qq"] = slice

newMap := make(map[string][]int)
for k, v := range valueMap {
    newMap[k] = append([]int{},v...)
}

golang对任意数据深拷贝

大佬GitHub地址:

https://github.com/huandu/go-clone

拷贝任意值(无法处理循环链表)

v := clone.Clone(t).(*T)

拷贝循环链表

node := Slowly(node1).(*ListNode)

注意(性能)

MacBook Pro (15-inch, 2019)
Processor: 2.6 GHz Intel Core i7

go 1.15.8
goos: darwin
goarch: amd64
pkg: github.com/huandu/go-clone

BenchmarkSimpleClone-12          8325153               137 ns/op              32 B/op          1 allocs/op
BenchmarkComplexClone-12          540330              2190 ns/op            1488 B/op         24 allocs/op
BenchmarkUnwrap-12              12075483                96.8 ns/op             0 B/op          0 allocs/op
BenchmarkSimpleWrap-12           3233422               373 ns/op              80 B/op          2 allocs/op
BenchmarkComplexWrap-12           757730              1498 ns/op             752 B/op         16 allocs/op

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!