第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

追加內(nèi)容以切片到嵌套結(jié)構(gòu)中不起作用

追加內(nèi)容以切片到嵌套結(jié)構(gòu)中不起作用

Go
慕慕森 2022-09-19 10:08:21
我有兩個嵌套結(jié)構(gòu),如下所示:type Block struct {    ID       string    Contents []string}type Package struct {    Name   string    Blocks []Block}當我嘗試在特定塊中追加新內(nèi)容時,原始包 () 不會更改。pfor _, b := range p.Blocks {    if b.ID == "B1" {        fmt.Println("Adding a new content")        b.Contents = append(b.Contents, "c3")    }}例:https://play.golang.org/p/5hm6RjPFk8o
查看完整描述

2 回答

?
小唯快跑啊

TA貢獻1863條經(jīng)驗 獲得超2個贊

發(fā)生這種情況是因為以下行:

for _, b := range p.Blocks {

創(chuàng)建切片中每個副本的副本。因此,當您在循環(huán)體中進行更改時,您將對 的副本進行更改,而不是對切片中的 進行更改。BlockBlockBlock

如果您改用索引來獲取指向每個 的指針,例如Block

for i := range p.Blocks {
    b := &p.Blocks[i]

它按預(yù)期工作:

https://play.golang.org/p/h_nXEX9oWRT


查看完整回答
反對 回復(fù) 2022-09-19
?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

在切片上循環(huán)時,從切片中檢索到的每個單個值都是切片中相應(yīng)元素的副本。因此,要修改切片中的元素,而不是副本,可以使用索引表達式直接訪問元素?;蛘吣梢允褂弥羔槨U堊⒁?,也會復(fù)制指針,但復(fù)制的指針將指向與切片中的元素相同的地址,因此可用于直接修改相同的數(shù)據(jù)。


您可以使用索引:


for i := range p.Blocks {

    if p.Blocks[i].ID == "B1" {

        fmt.Println("Adding a new content")

        p.Blocks[i].Contents = append(p.Blocks[i].Contents, "c3")

    }

}

https://play.golang.org/p/di175k18YQ9


或者您可以使用指針:


type Block struct {

    ID       string

    Contents []string

}


type Package struct {

    Name   string

    Blocks []*Block

}


for _, b := range p.Blocks {

    if b.ID == "B1" {

        fmt.Println("Adding a new content")

        b.Contents = append(b.Contents, "c3")

    }

}

https://play.golang.org/p/1RjWlCZkhYv


查看完整回答
反對 回復(fù) 2022-09-19
  • 2 回答
  • 0 關(guān)注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號