3 回答

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊
當(dāng)范圍覆蓋切片時,每次迭代都會返回兩個值。第一個是索引,第二個是該索引處元素的副本。
因此,它具有您正在迭代的數(shù)組/切片的值。
在你的情況下,該值是一個Student
結(jié)構(gòu)

TA貢獻(xiàn)1828條經(jīng)驗 獲得超13個贊
實際上這與 Go 中一切都是按值傳遞這一事實有關(guān)。
m := range src
m始終是相同的引用,并且其值會更新。查看它的一個簡單方法是打印地址
for _, m := range src {
? ? // ---
? ? p := &m
? ? fmt.Printf("%p\n", p)
? ? // ---
? ? data = append(data, &m) // notice point!!!
}

TA貢獻(xiàn)1785條經(jīng)驗 獲得超8個贊
首先,你可以通過內(nèi)省來找出真相m
。另外,您可以在循環(huán)之前聲明它 ( var m ...
) 作為實驗。
現(xiàn)在,你寫“我發(fā)現(xiàn) m 是一個固定指針”。首先,我不確定你所說的“固定指針”是什么意思,我也不認(rèn)為你是這樣的。固定(或常量)的是 的地址m
。結(jié)論是“因此每次都append(data,&m)
只是附加地址m
”,這正是發(fā)生的情況。然而,你的假設(shè)“m
似乎是*Student
”是有缺陷的,而是m
類型Student
,就這么簡單。
- 3 回答
- 0 關(guān)注
- 224 瀏覽
添加回答
舉報