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是否等同,都是深度拷贝?谢谢你帮忙
oipij1gg1#
方法1更精确-因为它精确地分配所需的切片大小并填充它。方法2的append将以8为单位分配一个容量切片(可能取决于您的体系结构)。因此,这3个初始项将被复制到大小为8的后备数组中:https://go.dev/play/p/C2nPQFflsM2
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
2条答案
按热度按时间oipij1gg1#
方法1更精确-因为它精确地分配所需的切片大小并填充它。
方法2的append将以8为单位分配一个容量切片(可能取决于您的体系结构)。因此,这3个初始项将被复制到大小为8的后备数组中:
https://go.dev/play/p/C2nPQFflsM2
rqenqsqc2#
如果修复了第二个方法的实现,则可以同时使用这两个方法。
https://go.dev/play/p/rkMmIsSaHVW