2 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
在您的第一個(gè)(非工作)示例中item是循環(huán)變量。它的地址沒(méi)有變化,只有它的價(jià)值。這就是為什么您在輸出idx時(shí)間內(nèi)獲得相同地址的原因。
運(yùn)行此代碼以查看正在運(yùn)行的機(jī)制;
func main() {
coll := []int{5, 10, 15}
for i, v := range coll {
fmt.Printf("This one is always the same; %v\n", &v)
fmt.Println("This one is 4 bytes larger each iteration; %v\n", &coll[i])
}
}

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
item整個(gè)循環(huán)只有一個(gè)變量,在循環(huán)的每次迭代中都會(huì)為其分配相應(yīng)的值。您不會(huì)item在每次迭代中獲得新變量。所以你只是重復(fù)取同一個(gè)變量的地址,這當(dāng)然是相同的。
另一方面,如果你在循環(huán)內(nèi)部聲明了一個(gè)局部變量,它在每次迭代中都會(huì)是一個(gè)新變量,并且地址會(huì)有所不同:
for idx, item := range *coll {
temp := item
output[idx] = &temp
}
- 2 回答
- 0 關(guān)注
- 278 瀏覽
添加回答
舉報(bào)