マップ割り当ての実行時エラー
質問:
マップを変換しようとしたときYAML ファイルを実行すると、「実行時エラー: nil マップのエントリへの割り当て」というエラーが発生します。次のコード スニペットを確認してください:
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 { //t := T{cn: "Chaithra", street: "fkmp"} m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
このエラーの原因と解決方法は何ですか?
答え:
問題は次のとおりです。外部マップ内の内部マップの初期化で。この例では、マップ m["uid"] が初期化されていないため、マップに名前を割り当てようとすると nil マップが生成されます。
内部マップを初期化するには、for の前に次の行を追加します。ループ:
m["uid"] = make(map[string]T)
これにより内部マップが作成され、nil マップ エラーが発生することなく名前をそれに割り当てることができます。
修正されたコードは次のようになります:
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 for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
以上がGo でマップに代入すると「ランタイム エラー: nil マップのエントリへの代入」が発生するのはなぜですか?またその修正方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。