3 回答

TA貢獻1843條經(jīng)驗 獲得超7個贊
這是有問題的分配。它不是看起來的那樣:
temp := t[:]
這里,t
是一個數(shù)組和循環(huán)變量。這意味著在每次迭代中,當(dāng)前數(shù)組的內(nèi)容都會復(fù)制到t
. 在第一次迭代中,t=[]string{"a","b"}
創(chuàng)建一個切片以指向該數(shù)組并分配給temp
。在第二次迭代t
被覆蓋成為[]string{"c","d"}
。此操作還會覆蓋第一個切片的內(nèi)容。所以,你最終得到{{"c","d"},{"c","d"}}
. 這里重要的一點是內(nèi)容t
被覆蓋,并t
在兩個切片之間共享。

TA貢獻1789條經(jīng)驗 獲得超8個贊
因為for range循環(huán)有一個迭代變量,它在每次迭代中都被重用。Spec: For statements: For statements with for 子句
由 init 語句聲明的變量在每次迭代中重復(fù)使用。
所以在你的第一個循環(huán)中:
for _, t := range z {
temp := t[:]
id = append(id, temp)
}
有一個t,并且您對相同的t數(shù)組進行切片,因此您附加的每個temp切片都將指向相同的后備數(shù)組,即t,并且在每次迭代中都會被覆蓋,因此其值將是最后一次迭代的值:[c d].
在你的第二個循環(huán)中:
for _, t := range z {
temp := t
id2 = append(id2, temp[:])
}
還有一個t迭代變量,但是你制作了它的一個副本:temp := t,然后對這個副本t進行切片,它與.

TA貢獻1785條經(jīng)驗 獲得超4個贊
在第一個循環(huán)中,您要保存具有相同后備數(shù)組(即循環(huán)變量t
)的切片。在第二個循環(huán)中,您使用不同的后備數(shù)組存儲切片,因為您制作了t
in的副本temp
。
- 3 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報