実行時エラー: マップのスライス作成中に「Nil マップのエントリへの代入」
マップのスライスを生成しようとしましたが、 「nil マップのエントリへの代入」実行時エラーが発生します。コードは正常にコンパイルされているにもかかわらず、このエラーによりプログラムの実行が妨げられます。
目的は、各マップに「Id」と「Investor」の 2 つのインデックスが含まれるマップの配列を作成することです。このコードは次のことを試みます:
<code class="go">for _, row := range rows { invs := make([]map[string]string, length) for i := 0; i < length; i++ { invs[i] = make(map[string]string) invs[i]["Id"] = inv_ids[i] invs[i]["Investor"] = inv_names[i] } return(msg) }</code>
当初、次のコードで問題に対処しようとしました:
<code class="go">invs := make([]make(map[string]string), length)</code>
しかし、問題は解決されませんでした。
包括的なソリューション
マップのスライスを効果的に作成するには、別のアプローチを採用する必要があります。次の例を考えてみましょう:
<code class="go">package main import "fmt" func main() { a := make([]map[string]int, 100) for i := 0; i < 100; i++ { a[i] = map[string]int{"id": i, "investor": i} } fmt.Println(a) }</code>
ループを使用して各マップに値を割り当てる代わりに、複合リテラルを使用できます:
<code class="go">invs[i] = map[string]string{"Id": inv_ids[i], "Investor": inv_names[i]}</code>
構造体を使用した代替ソリューション
より慣用的なアプローチの場合は、投資家を表す構造体を使用することをお勧めします。
<code class="go">package main import ( "fmt" " strconv" ) type Investor struct { Id int Name string } func main() { a := make([]Investor, 100) for i := 0; i < 100; i++ { a[i] = Investor{Id: i, Name: "John" + strconv.Itoa(i)} fmt.Printf("%#v\n", a[i]) } }</code>
これらの手法を採用することで、実行時エラーを排除し、必要なスライスを取得できます。プログラムの特定の要件に応じて、マップまたは構造体の配列を取得できます。
以上がGo でマップのスライスを作成中に「実行時エラー: Nil マップのエントリへの割り当て」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。