Go でマップのスライスを作成中に「実行時エラー: Nil マップのエントリへの割り当て」が発生するのはなぜですか?

Patricia Arquette
リリース: 2024-11-04 12:40:29
オリジナル
798 人が閲覧しました

Why am I getting a

実行時エラー: マップのスライス作成中に「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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!