解決映射分配中的運行時錯誤
開發人員在嘗試建立映射時遇到運行時錯誤「分配給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中文網其他相關文章!