1 回答

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
您不將結(jié)果存儲(chǔ)append()
在“原始”中slice
,因?yàn)槟褂枚套兞柯暶鞫皇琴x值:
slice := append(slice, i)
短變量聲明(因?yàn)樗c原始slice變量位于不同的塊中)創(chuàng)建一個(gè)新變量(隱藏外部slice),并在循環(huán)內(nèi)打印這個(gè)新變量。因此,每次追加的結(jié)果僅在循環(huán)體內(nèi)可見,并在迭代結(jié)束時(shí)丟失。而是使用賦值:
slice = append(slice, i)
但是,當(dāng)您這樣做時(shí),您將得到一個(gè)無限循環(huán),因?yàn)槟难h(huán)條件是i < len(slice),并且slice在每次迭代中都會(huì)增長。
相反,你應(yīng)該這樣做(評(píng)估len(slice)一次并存儲(chǔ)它):
for i, length := 0, len(slice); i < length; i++ {
? ? slice = append(slice, i)
? ? fmt.Println(slice)
}
輸出將是(在Go Playground上嘗試):
[5 4 3 2 1 0]
[5 4 3 2 1 0 1]
[5 4 3 2 1 0 1 2]
[5 4 3 2 1 0 1 2 3]
[5 4 3 2 1 0 1 2 3 4]
[5 4 3 2 1 0 1 2 3 4]
請(qǐng)注意,如果使用 ,您將得到相同的結(jié)果for range,因?yàn)樗挥?jì)算切片一次:
for i := range slice {
? ? slice = append(slice, i)
? ? fmt.Println(slice)
}
在Go Playground上試試這個(gè)。
- 1 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報(bào)