我想复制一个包含指针的切片,这样新切片中的指针指向新值:假设s
是原始切片,c
是副本。然后改变*c[i]
不应该影响*s[i]
。
根据this answer的说法,这不是通常的复制方法所发生的情况。
最简单的方法是什么?
使用以下代码复制值:
c := make([]*T, len(s))
for i, p := range s {
if p == nil {
// Skip to next for nil source pointer
continue
}
// Create shallow copy of source element
v := *p
// Assign address of copy to destination.
c[i] = &v
}
此代码创建值的浅表副本。根据应用程序要求,您可能希望深度复制值,或者如果是结构类型,则需要一个或多个字段。具体情况取决于实际类型T和应用要求。