1. ホーム
  2. map

[解決済み] ランタイムエラー:nilマップのエントリへの代入

2022-01-29 07:50:33

質問

私は、地図を生成し、それを次のような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 {

        //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)
}

以下のようなエラーが出ています。

panic: runtime error: assignment to entry in nil map

解決方法は?

内部マップが初期化されていません。for ループの前に m["uid"] = make(map[string]T) という名前を付けます。