复制切片指针(指向新值)

时间:2019-03-03 20:58:37

标签: pointers go copy slice

我想复制一个包含指针的切片,以便新切片中的指针指向新值:假设s是原始切片,而c是副本。然后更改*c[i]应该不会影响*s[i]

根据this answer,通常的复制方法不会发生这种情况。

最短的方法是什么?

1 个答案:

答案 0 :(得分:1)

使用以下代码复制值:

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
}

Run it in the playground

此代码创建值的浅表副本。根据应用程序的要求,您可能需要深度复制值,或者如果是结构类型,则要复制一个或多个字段。具体情况取决于实际的T型和应用需求。