「実行時エラー: Nil マップのエントリへの代入」を理解する
Go の組み込みマップ データ構造を利用しようとする場合、次のことが考えられます。恐ろしい「実行時エラー: nil マップのエントリへの割り当て」が発生します。このエラーは、nil (または初期化されていない) マップ内の存在しないキーに値を割り当てようとしたことが原因で発生します。
あなたの特定のケースでは、マップから YAML ファイルを生成しようとしています。 key は「uid」を表し、各値は個人に関する情報を含むマップです。ただし、コードでランタイム エラーが発生します。
解決策: 内部マップの初期化
この問題は、内部マップ (「uid」) が事前に初期化されていないために発生します。キーに値を割り当ててみます (例: 「kasi」、「remya」、「nandan」)。これを解決するには、for ループの前に次の行を追加します。
m["uid"] = make(map[string]T)
この行は、内部マップを初期化し、それを外部マップ (m) のキー「uid」に関連付けます。これで、内部マップ内のキーに安全に値を割り当てることができます:
m["uid"][name] = T{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)) m["uid"] = make(map[string]T) for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) }
この変更により、「実行時エラー: nil マップのエントリへの割り当て」は発生しなくなります。コードは、目的の構造を持つ YAML ファイルを正常に生成します。
以上がGo で「実行時エラー: Nil マップのエントリへの代入」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。