ホームページ  >  記事  >  バックエンド開発  >  Goでマップのスライスを作成するときに発生する「nilマップのエントリへの代入」エラーを回避するにはどうすればよいですか?

Goでマップのスライスを作成するときに発生する「nilマップのエントリへの代入」エラーを回避するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 16:23:02593ブラウズ

How to Avoid the

Nil マップ エラーのエントリへの代入: マップのスライスの作成

マップのスライスを作成しようとするときは、メモリがどのように使用されるかを理解することが重要ですGo では割り当てられ、アクセスされます。 nil マップ エントリに値を割り当てようとすると、ランタイム エラー「nil マップのエントリへの代入」が発生します。

提供されたコードの目的は、各マップに 2 つのインデックスが含まれるマップのスライスを作成することです。 : 「ID」と「投資家」。最初のアプローチでは、マップの配列を作成する必要がありました:

invs := make([]map[string]string, length)

しかし、invs スライスには最初は nil マップが含まれているため、パニック エラーが発生しました。これを修正するには、正しい宣言は次のとおりです。

a := make([]map[string]int, 100)

これは、スライスの各要素を空のマップで初期化します。

次に、コードはマップを反復処理して、マップにデータを設定します。

for i := 0; i < length; i++ {
    invs[i] = make(map[string]string)
    invs[i]["Id"] = inv_ids[i]
    invs[i]["Investor"] = inv_names[i]
}

このアプローチでは、スライス内の各エントリのマップを作成します。ただし、マップを設定するより簡潔な方法は、複合リテラルを使用することです:

invs[i] = map[string]string{"Id": inv_ids[i], "Investor": inv_names[i]}

これにより、すでに設定されたマップが作成されます。

より慣用的なアプローチについては、投資家を表す構造体の使用を検討してください。

type Investor struct {
    Id   int
    Name string
}

その後、投資家のスライスを作成します。

a := make([]Investor, 100)
for i := 0; i < 100; i++ {
    a[i] = Investor{Id: i, Name: "John" + strconv.Itoa(i)}
}

このアプローチは、投資家データを表現するためのよりクリーンでタイプセーフな方法を提供します。

以上がGoでマップのスライスを作成するときに発生する「nilマップのエントリへの代入」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。