示例代碼(編輯過的代碼段):http : //play.golang.org/p/eZV4WL-4N_為什么是這樣for x, _ := range body.Personality { body.Personality[x].Mutate()}成功地改變了結(jié)構(gòu)的內(nèi)容,但是for _, pf := range body.Personality{ pf.Mutate()}才不是?該范圍是否會(huì)為其迭代的每個(gè)項(xiàng)目創(chuàng)建新實(shí)例?因?yàn)榻Y(jié)構(gòu)確實(shí)會(huì)發(fā)生變異,但它不會(huì)持續(xù)存在。
2 回答

搖曳的薔薇
TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
你的第二個(gè)循環(huán)大致相當(dāng)于:
for x := range body.Personality {
pf := body.Personality[x]
pf.Mutate()
}
由于body.Personality是一個(gè)結(jié)構(gòu)體數(shù)組,因此對(duì)結(jié)構(gòu)體的賦值pf創(chuàng)建了該結(jié)構(gòu)體的副本,這就是我們所說Mutate()的。
如果您想按照示例中的方式遍歷數(shù)組,一種選擇是使其成為指向結(jié)構(gòu)的指針數(shù)組(即[]*PFile)。這樣循環(huán)中的賦值就只需要一個(gè)指向結(jié)構(gòu)的指針,允許你修改它。
- 2 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報(bào)
0/150
提交
取消