我有一片結構。我正在嘗試將此切片復制到新變量,因為我的原始切片更改了很多工作表模型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 關注
- 140 瀏覽
添加回答
舉報
0/150
提交
取消