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

问题描述 投票:2回答:1

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

根据this answer的说法,这不是通常的复制方法所发生的情况。

最简单的方法是什么?

pointers go copy slice
1个回答
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和应用要求。

© www.soinside.com 2019 - 2024. All rights reserved.