首頁 > 後端開發 > Golang > 主體

Golang 函數接收 map 參數時的注意事項

WBOY
發布: 2024-06-04 10:31:14
原創
349 人瀏覽過

在 Go 中傳遞 map 給函數時,預設會建立副本,對副本的修改不影響原始 map。如果需要修改原始 map,可透過指標傳遞。空 map 要小心處理,因為技術上是 nil 指針,傳遞空 map 給期望非空 map 的函數會發生錯誤。

Golang 函数接收 map 参数时的注意事项

Go 函數接收map 參數時的注意事項

在Go 中,傳遞map 給函數作為參數時,存在著一些注意事項,如果不加以注意,可能會導致意想不到的結果。

副本傳遞

當將 map 傳遞給函數時,預設會建立一個副本。也就是說,函數內的 map 是該參數 map 的副本,副本所做的任何修改都不會影響原始 map。

實戰案例 1:

func modifyMap(m map[string]int) {
    m["key"] = 100
}

func main() {
    m := make(map[string]int)
    modifyMap(m)
    fmt.Println(m) // 输出:{}
}
登入後複製

如範例所示,modifyMap 函數對 map 所做的修改不會影響原始 map。

避免副本傳遞

如果需要修改原始 map,可以使用指標來傳遞。當傳遞指標時,函數內的 map 指向原始 map 的記憶體位址。

實戰案例 2:

func modifyMap(m *map[string]int) {
    (*m)["key"] = 100
}

func main() {
    m := make(map[string]int)
    modifyMap(&m)
    fmt.Println(m) // 输出:{key: 100}
}
登入後複製

如範例所示,modifyMap 函數對 map 所做的修改會影響原始 map。

空 map

傳遞空 map 給函數時,需要小心。空 map 在技術上來說是一個 nil 指針,而並非一個有效 map。因此,如果函數期望非空 map,則在傳遞空 map 時可能會發生錯誤。

實戰案例 3:

func printMap(m map[string]int) {
    for k, v := range m {
        fmt.Println(k, v)
    }
}

func main() {
    var m map[string]int // 空 map
    printMap(m) // 运行时错误:panic: runtime error: invalid memory address or nil pointer dereference
}
登入後複製

如範例所示,傳遞空 map 給函數會導致執行時間錯誤。要解決此問題,可以對 map 進行非空檢查,或提供一個預設值。

結論:

  • 傳遞 map 給函數時,預設會建立一個副本。
  • 要修改原始 map,可以使用指標來傳遞。
  • 小心處理空 map。

以上是Golang 函數接收 map 參數時的注意事項的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!