首頁 >後端開發 >Golang >為什麼我的 Go 程式碼在建立 YAML 映射時會產生「指派給 nil 映射中的條目」錯誤?

為什麼我的 Go 程式碼在建立 YAML 映射時會產生「指派給 nil 映射中的條目」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 19:10:11209瀏覽

Why Does My Go Code Produce a

解決映射分配中的運行時錯誤

開發人員在嘗試建立映射時遇到運行時錯誤「分配給nil 映射中的條目」並將其轉換為YAML。該程式碼旨在產生以下結構:

uid :
  kasi:
    cn: Chaithra
    street: fkmp
  nandan:
    cn: Chaithra
    street: fkmp
  remya:
    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))
    for _, name := range names {
        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
    }
    fmt.Println(m)

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

    fmt.Println(string(y))
}

錯誤源自於內部映射「uid」這一事實,在為其條目賦值之前未初始化。要修正此問題,可以將程式碼修改如下:

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) // Initialize the inner map here
    for _, name := range names {
        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
    }
    fmt.Println(m)

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

    fmt.Println(string(y))
}

透過初始化內部映射,我們確保它存在並且可以賦值,而不會引發運行時錯誤。此調整允許程式碼產生所需的映射結構並成功將其轉換為 YAML。

以上是為什麼我的 Go 程式碼在建立 YAML 映射時會產生「指派給 nil 映射中的條目」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn