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

Patricia Arquette
リリース: 2024-11-05 16:23:02
オリジナル
592 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート