首頁 > 後端開發 > Golang > 如何安全處理 Go 中的巢狀映射並避免執行階段錯誤?

如何安全處理 Go 中的巢狀映射並避免執行階段錯誤?

Linda Hamilton
發布: 2024-12-12 21:06:23
原創
931 人瀏覽過

How to Safely Handle Nested Maps in Go and Avoid Runtime Errors?

Golang 中的巢狀映射

在 Golang 中,巢狀對應可用於建立分層資料結構。但是,使用巢狀映射時可能會出現一些意外行為。

多括號支援

Go 支援多個括號來存取巢狀對應。例如,以下程式碼成功列印與鍵「w」相關的值:

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
登入後複製
登入後複製

Nil Map

當巢狀對應不存在時,就會出現問題已初始化。地圖類型的零值為 nil。對 nil 映射建立索引將導致運行時錯誤。例如,如果將上述程式碼修改如下:

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
登入後複製
登入後複製

程式將失敗並出現錯誤:

panic: runtime error: assignment to entry in nil map
登入後複製
要解決此問題,必須在先前初始化巢狀映射為其條目賦值:

func main() {
    var data = map[string]map[string]string{}

    data["a"] = map[string]string{}
    data["b"] = make(map[string]string)
    data["c"] = make(map[string]string)

    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}
登入後複製
或者,複合文字可用來初始化巢狀地圖:

以上是如何安全處理 Go 中的巢狀映射並避免執行階段錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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