如何制作结构的复制切片

我有一片结构。我正在尝试将此切片复制到新变量,因为我的原始切片更改了很多工作表模型


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也会发生变化。


慕虎7371278
浏览 122回答 2
2回答

湖上湖

从您的问题和@Masklinn 示例链接。我可以看到您使用 *pointer(指针指向的地址)设置值,这意味着将该地址的值设置为新值。没有任何关系复制这正是它的意思。在这种情况下,它克隆了指向字段值地址的字段指针的值。问题在于您使用和设置指针值的方式。有3种方法可以避免您提到的问题。编写您的自定义克隆切片,该切片初始化新结构并仅将原始切片中的值克隆到新切片。仍然使用克隆,但是当您设置字段的值时,将字段的指针设置为新地址。其他切片的项目指针仍然指向旧值。如果您没有任何特殊原因,请不要使用指针。您可以参考我的代码,这是我的答案的演示。https://play.golang.org/p/-pIgEDER-hI关于指针的链接,直接指出如何使用指针。 https://tour.golang.org/moretypes/1

牧羊人nacy

也许您可以将其转换回 json 并将该 json 解组到其新目的地。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go