Go 如何制作struct的副本切片

Go 如何制作struct的副本切片,go,Go,我有一个struct的切片。我正试图将这个切片复制到新变量,因为我的原始切片变化很大 板材模型 type Timesheet struct { ID *int64 `json:"id"` TimestampStart *time.Time `json:"timestampStart"` TimestampEnd *time.Time `json:"timestampEnd"` } SheetArrayCopy := make(

我有一个struct的切片。我正试图将这个切片复制到新变量,因为我的原始切片变化很大 板材模型

type Timesheet struct {
    ID              *int64     `json:"id"`
    TimestampStart  *time.Time `json:"timestampStart"`
    TimestampEnd    *time.Time `json:"timestampEnd"`
}


SheetArrayCopy := make([]models.Sheet, len(sheetList))
copy(SheetArrayCopy, SheetList)
//several steps which goes through SheetList and changes the value of sheetList

但是,当我更改sheetList中的值时,SheetArrayCopy的值也会更改。

也许您可以将其转换回json,并将该json解编到新的目标。

来自您的问题和@masklin示例链接。我可以看到,您通过使用指针指向的*指针地址来设置值,这意味着将该地址的值设置为新值

与此无关

抄袭

这正是它的意思。在本例中,它克隆字段指针的值,该指针指向字段值的地址

问题在于如何使用和设置指针的值

有三种方法可以避免您提到的问题

编写自定义克隆切片,初始化新结构并仅将值从原始切片克隆到新切片。 仍在使用克隆,但在设置字段值时,请将字段指针设置为新地址。其他切片的项指针仍然指向旧值。 如果没有任何特殊原因,请不要使用指针。 你可以参考我的代码,这是我答案的演示

关于指针的链接,直接指出如何使用指针。

很可能只是复制指针,而不是指针值。请出示a。这也是我的假设。复制是一个浅层复制,它将项目从一个切片复制到另一个切片,但不会递归,因此,如果这些项目中的任何一个包含指针,指针本身将被复制,指针对象不会被复制。因此,如果修改指针对象,将影响所有副本。下面是问题的演示:请提供一个包含完整细节的答案。你的答案应该对将来阅读该问题的任何人都清晰易懂。嗨。谢谢你的回复。但是这个解决方案是正确的,但是我希望有一个特定于go的解决方案,它不使用json.Hey。谢谢你的回答。我知道第2点和第3点。只是想确保没有任何预构建的功能,因为这似乎是reasl世界场景中非常常见的场景。我有一个很好的理由使用指针,因为我需要空值来插入数据库。基元类型不允许这些