示例代碼(編輯過的代碼段):http : //play.golang.org/p/eZV4WL-4N_為什么是這樣for x, _ := range body.Personality { body.Personality[x].Mutate()}成功地改變了結構的內容,但是for _, pf := range body.Personality{ pf.Mutate()}才不是?該范圍是否會為其迭代的每個項目創建新實例?因為結構確實會發生變異,但它不會持續存在。
2 回答

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