在golang中使用“copy”或“append”切片类型是否等效

63lcw9qa  于 2023-02-10  发布在  Go
关注(0)|答案(2)|浏览(141)
a := []byte{1, 2, 3}
    // Method: 1
    b := make([]byte, len(a))
    copy(b, a)
    // Method: 2
    c := append([]byte(nil), a...)

问:方法2是否比方法1更简洁、更有效?
Q:模式2和模式1是否等同,都是深度拷贝?
谢谢你帮忙

oipij1gg

oipij1gg1#

方法1更精确-因为它精确地分配所需的切片大小并填充它。
方法2的append将以8为单位分配一个容量切片(可能取决于您的体系结构)。因此,这3个初始项将被复制到大小为8的后备数组中:
https://go.dev/play/p/C2nPQFflsM2

rqenqsqc

rqenqsqc2#

如果修复了第二个方法的实现,则可以同时使用这两个方法。

// 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

相关问题