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

标签 pointers go copy slice

我想复制一个包含指针的 slice ,这样新 slice 中的指针指向新值:假设 s 是原始 slice ,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
}

Run it in the playground .

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

关于pointers - 复制一片指针(指向新值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54973683/

相关文章:

go - 在 for 循环中生成 goroutine 时发生死锁

python - 根据文件中的条件随机抽取文件样本

webpack - compiler.getLogger 不是一个函数

pointers - golang slice 中的内存泄漏

c++ - 运算符[]处理指针时的内部逻辑

c++ - 如何避免一组值(在 .so 回调调用中收集)指向同一地址?

c++ - 为什么我的变量被覆盖了?

networking - Golang使用sftp golang库将远程文件复制到本地文件夹

javascript - 如何在Javascript中克隆整个 "object"?