复制一片指针(指向新值)
Posted
技术标签:
【中文标题】复制一片指针(指向新值)【英文标题】:Copy a slice of pointers (pointing to new values) 【发布时间】:2019-07-25 04:49:51 【问题描述】:我想复制一个包含指针的切片,以便新切片中的指针指向新值:假设s
是原始切片,c
是副本。那么更改*c[i]
应该不会影响*s[i]
。
根据this answer,通常的复制方法不会发生这种情况。
执行此操作的最短方法是什么?
【问题讨论】:
那么 IIUC,你想要一个len(s)
的切片,其中的指针指向 nil 值?如果是,copy
的唯一工作就是提供s
的长度。你最好直接传递 len 并创建一个新切片。
【参考方案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型和应用要求。
【讨论】:
以上是关于复制一片指针(指向新值)的主要内容,如果未能解决你的问题,请参考以下文章