マップ割り当てのランタイム エラーへの対処
開発者がマップを作成しようとしているときに、ランタイム エラー「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 に正常に変換できるようになります。
以上がYAML マップの作成時に Go コードで「nil マップのエントリへの代入」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。