亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何制作結構的復制切片

如何制作結構的復制切片

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 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號