a := []byte{1, 2, 3}
// Method: 1
b := make([]byte, len(a))
copy(b, a)
// Method: 2
c := append([]byte(nil), a...)
Q: 方法2是否比方法1更简洁高效?
Q: 模式2和模式1是否等效,是否都是深度复制?
谢谢你的帮助
方法1更精确,因为它准确地分配了所需的切片大小&填充。
方法2的追加将以8为单位分配一部分容量(可能取决于您的体系结构(。因此,这3个初始项目将被复制到大小为8:的后备阵列中
https://go.dev/play/p/C2nPQFflsM2
如果修复了第二个方法的实现,则可以同时使用这两个方法。
// Method 1
b := make([]byte, len(a))
copy(b, a)
// Method 2
c := make([]byte, 0, len(a))
c = append(c, a...)
https://go.dev/play/p/rkMmIsSaHVW