在 golang 中等效"copy"还是"append"切片类型等效使用


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

最新更新