英文:
Is it equivalent use "copy" or "append" slice type in golang
问题
a := []byte{1, 2, 3}
// 方法一
b := make([]byte, len(a))
copy(b, a)
// 方法二
c := append([]byte(nil), a...)
问题:方法二比方法一更简洁和高效吗?
问题:方法二和方法一是否等效,都是深拷贝?
谢谢你的帮助。
英文:
a := []byte{1, 2, 3}
// Method: 1
b := make([]byte, len(a))
copy(b, a)
// Method: 2
c := append([]byte(nil), a...)
Q: Is the method 2 more concise and efficient than method 1?
Q: Whether mode 2 and mode 1 are equivalent, both are deep copy?
thank you for your help
答案1
得分: 6
方法1更精确,因为它会分配所需的确切切片大小并填充它。
方法2的append函数将分配一个容量为8的切片(取决于你的架构)。所以这3个初始项将被复制到一个大小为8的后备数组中:
https://go.dev/play/p/C2nPQFflsM2
英文:
Method 1 is more precise - as it allocates exactly the slice size it needs & fills it.
Method 2's append will allocate a slice of capacity (depending probably on your architecture) in units of 8. So those 3 initial items will be copied to a backing array of size 8:
答案2
得分: 1
你可以在修复第二种方法的实现后同时使用这两种方法。
// 方法1
b := make([]byte, len(a))
copy(b, a)
// 方法2
c := make([]byte, 0, len(a))
c = append(c, a...)
https://go.dev/play/p/rkMmIsSaHVW
英文:
You can use both methods if you fix the implementation of the second method.
// Method 1
b := make([]byte, len(a))
copy(b, a)
// Method 2
c := make([]byte, 0, len(a))
c = append(c, a...)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论