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
golang数据深拷贝
https://www.inktea.eu.org/2021/22462.html