如何复制结构片段

时间:2020-03-04 09:13:01

标签: go

我有一部分结构。我试图将此切片复制到新变量,因为我的原始切片发生了很大变化 图纸模型

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的值也会更改。

2 个答案:

答案 0 :(得分:0)

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

无关

复制

这正是它的意思所在。在这种情况下,它将克隆字段指针的值,该指针指向字段值的地址。

问题在于您使用和设置指针值的方式。

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

  1. 编写您的自定义克隆切片,该切片将初始化新结构,并仅将从原始切片克隆到新切片。
  2. 仍然使用克隆,但是在设置字段的值时,请将字段的指针设置为新地址。其他切片的项目指针仍指向旧值。
  3. 如果没有特殊原因,请不要使用指针。

您可以参考我的代码,这是我的答案的演示。

https://play.golang.org/p/-pIgEDEr-hI

有关指针的链接,直接指出如何使用指针。 https://tour.golang.org/moretypes/1

答案 1 :(得分:-1)

也许您可以将其隐藏回json,并将其解组到新的目的地。

相关问题