Go でスライスの初期化中に「Nil マップのエントリへの代入エラー」を解決する方法は?

Linda Hamilton
リリース: 2024-11-05 11:37:02
オリジナル
486 人が閲覧しました

How to Resolve the

スライスの初期化中の nil マップ エントリへの代入エラー

この実行時エラーは、スライス内の nil マップ エントリに代入するときに発生します。提供されたコードでは、マップのスライスを作成しようとしたときにエラーが発生しています。

この問題を修正するには、アプローチを次のように変更する必要があります。

<code class="go">type Investor struct {
    Id   string
    Name string
}

var invs []Investor

for _, row := range rows {
    var inv_ids []string
    var inv_names []string

    // Create arrays of data from MySQL GROUP_CONCAT function
    inv_ids = strings.Split(row.Str(10), ",")
    inv_names = strings.Split(row.Str(11), ",")

    // Build slice of investors
    for i := 0; i < len(inv_ids); i++ {
        invs = append(invs, Investor{inv_ids[i], inv_names[i]})
    }
}</code>
ログイン後にコピー

ここでは、次のように定義します。各マップ エントリを表すカスタム Investor 構造体。次に、invs を Investor 構造体のスライスとして初期化し、ループ内に設定します。このアプローチでは、nil マップの使用を回避し、値の適切な割り当てを保証します。

提供された回答に示されている代替オプションには、複合リテラルを使用してスライス内でマップを直接初期化することが含まれます。これは次のようにして実現できます:

<code class="go">var invs []map[string]string

for _, row := range rows {
    var inv_ids []string
    var inv_names []string

    // Create arrays of data from MySQL GROUP_CONCAT function
    inv_ids = strings.Split(row.Str(10), ",")
    inv_names = strings.Split(row.Str(11), ",")

    // Build slice of maps
    for i := 0; i < len(inv_ids); i++ {
        invs = append(invs, map[string]string{"Id": inv_ids[i], "Investor": inv_names[i]})
    }
}</code>
ログイン後にコピー

以上がGo でスライスの初期化中に「Nil マップのエントリへの代入エラー」を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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