首頁 > 後端開發 > Golang > 為什麼 Go Slice Range 循環在使用 `&stu` 時為映射鍵分配相同的位址?

為什麼 Go Slice Range 循環在使用 `&stu` 時為映射鍵分配相同的位址?

Susan Sarandon
發布: 2024-12-06 04:14:10
原創
547 人瀏覽過

Why Do Go Slice Range Loops Assign the Same Address to Map Keys When Using `&stu`?

深入研究 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板