我有一片结构。我正在尝试将此切片复制到新变量,因为我的原始切片更改了很多工作表模型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 回答
湖上湖
TA贡献2003条经验 获得超2个赞
从您的问题和@Masklinn 示例链接。我可以看到您使用 *pointer(指针指向的地址)设置值,这意味着将该地址的值设置为新值。
没有任何关系
复制
这正是它的意思。在这种情况下,它克隆了指向字段值地址的字段指针的值。
问题在于您使用和设置指针值的方式。
有3种方法可以避免您提到的问题。
编写您的自定义克隆切片,该切片初始化新结构并仅将原始切片中的值克隆到新切片。
仍然使用克隆,但是当您设置字段的值时,将字段的指针设置为新地址。其他切片的项目指针仍然指向旧值。
如果您没有任何特殊原因,请不要使用指针。
您可以参考我的代码,这是我的答案的演示。
https://play.golang.org/p/-pIgEDER-hI
关于指针的链接,直接指出如何使用指针。 https://tour.golang.org/moretypes/1
- 2 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消