首頁 > 後端開發 > Golang > 為什麼我在 Go 中收到'運行時錯誤:分配給 Nil Map 中的條目”?

為什麼我在 Go 中收到'運行時錯誤:分配給 Nil Map 中的條目”?

Barbara Streisand
發布: 2024-12-06 16:47:18
原創
146 人瀏覽過

Why Am I Getting a

理解「執行階段錯誤:指派給Nil Map 中的項目」

當嘗試使用Go 內建的Map 資料結構時,您可能會遇到以下問題:遇到可怕的「運行時錯誤:分配給nil 映射中的條目」。此錯誤源自於嘗試將值指派給 nil(或未初始化)對映中不存在的鍵。

在您的特定情況下,您嘗試從映射生成一個 YAML 文件,其中每個key 代表一個“uid”,每個值都是一個包含個人資訊的映射。但是,您的程式碼遇到運行時錯誤。

解決方案:初始化內部映射

出現問題是因為您的內部映射(“uid”)在您之前沒有初始化嘗試為其鍵分配值(例如「kasi」、「remya」和「nandan」)。要解決此問題,只需在 for 循環之前添加以下行:

m["uid"] = make(map[string]T)
登入後複製

此行初始化內部映射並將其與外部映射 (m) 中的鍵“uid”相關聯。現在,您可以安全地將值分配給內部映射中的鍵:

m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
登入後複製

精煉代碼

這是已修復的代碼:

package main

import (
    "fmt"
    "gopkg.in/yaml.v2"
)

type T struct {
    cn     string
    street string
}

func main() {
    names := []string{"kasi", "remya", "nandan"}

    m := make(map[string]map[string]T, len(names))
    m["uid"] = make(map[string]T)
    for _, name := range names {

        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

    }
    fmt.Println(m)

    y, _ := yaml.Marshal(&m)

    fmt.Println(string(y))
}
登入後複製

透過此修改,您將不再遇到「執行階段錯誤:指派給nil 對應中的項目」。您的程式碼將成功產生具有所需結構的 YAML 檔案。

以上是為什麼我在 Go 中收到'運行時錯誤:分配給 Nil Map 中的條目”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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