深入研究 Go Slice Range 現象
在提供的程式碼片段中,使用 range 關鍵字迭代學生結構體的切片。然而,將學生地址分配給映射揭示了一個看似令人困惑的問題:產生的映射鍵具有相同的地址。
要理解這種現象,重要的是要認識到在 Go 中, range 關鍵字會迭代切片的元素,而不是地址。這表示範圍循環內的變數 Stu 是切片元素的副本。因此,當取得 Stu 的位址並將其指派給映射鍵時,將儲存副本的位址,而不是切片元素的位址。
要修正此問題,需要修改程式碼以明確取得切片元素的位址。這可以透過使用切片索引變數 i 來實現:
for i := range s { m[s[i].Name] = &s[i] }
此修改可確保映射鍵保存實際切片元素的位址。
透過理解迭代之間的差異透過對元素進行切片並獲取其地址,開發人員可以避免潛在的混亂,並確保在 Go 中使用切片時程式碼的預期行為。
以上是為什麼 Go Slice Range 循環在使用 `&stu` 時為映射鍵分配相同的位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!