为了账号安全,请及时绑定邮箱和手机立即绑定

如何制作结构的复制切片

如何制作结构的复制切片

Go
慕虎7371278 2022-05-18 16:41:47
我有一片结构。我正在尝试将此切片复制到新变量,因为我的原始切片更改了很多工作表模型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种方法可以避免您提到的问题。

  1. 编写您的自定义克隆切片,该切片初始化新结构并仅将原始切片中的值克隆到新切片。

  2. 仍然使用克隆,但是当您设置字段的值时,将字段的指针设置为新地址。其他切片的项目指针仍然指向旧值。

  3. 如果您没有任何特殊原因,请不要使用指针。

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

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

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


查看完整回答
反对 回复 2022-05-18
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

也许您可以将其转换回 json 并将该 json 解组到其新目的地。



查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信