首頁 > 後端開發 > Golang > 為什麼在 Go 中對指標傳遞的映射進行索引會導致編譯錯誤?

為什麼在 Go 中對指標傳遞的映射進行索引會導致編譯錯誤?

Mary-Kate Olsen
發布: 2024-11-13 00:36:02
原創
961 人瀏覽過

Why Does Indexing a Map Passed by Pointer in Go Cause Compilation Errors?

Go 中按值傳遞與指針傳遞映射

在Go 中,按值傳遞和按指針傳遞可能會令人困惑,尤其是在處理地圖類型。本文解決了對透過指標傳遞的映射進行索引的問題,該問題會導致編譯錯誤。

問題

當嘗試透過指標傳遞對應並修改其時值,Go 會引發該型別不支援索引的錯誤。這是因為地圖不支援在指標上建立索引。

解決方案

要避免此錯誤,請在地圖建立索引之前取消引用指標。使用 (*b)[amount.Currency] 代替 b[amount.Currency]。

進一步討論

預設情況下,傳遞像整數這樣的簡單類型值,而結構和介面則透過引用傳遞。然而,地圖的情況並非如此。映射預設透過引用傳遞,因此透過值或指標傳遞它們本質上是相同的。

在上面的範例中,沒有必要為 Add 方法使用指標接收器,因為映射已經透過引用傳遞。此方法可以編寫如下,而不會損失任何功能:

func (b Balance) Add(amount Amount) Balance {
    current, ok := b[amount.Currency]
    if ok {
        b[amount.Currency] = current + amount.Value
    } else {
        b[amount.Currency] = amount.Value
    }
    return b
}
登入後複製

總之,在使用地圖時,沒有必要透過指標傳遞它們以避免複製。按值傳遞可以達到相同的結果,而不需要取消引用。

以上是為什麼在 Go 中對指標傳遞的映射進行索引會導致編譯錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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