ホームページ >バックエンド開発 >Golang >Go でネストされたマップを安全に処理し、ランタイム エラーを回避する方法は?

Go でネストされたマップを安全に処理し、ランタイム エラーを回避する方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-12 21:06:23992ブラウズ

How to Safely Handle Nested Maps in Go and Avoid Runtime Errors?

Golang のネストされたマップ

Golang では、ネストされたマップを使用して階層データ構造を作成できます。ただし、ネストされたマップを操作する場合、予期しない動作が発生する可能性があります。

複数のブラケットのサポート

Go は、ネストされたマップにアクセスするための複数のブラケットをサポートしています。たとえば、次のコードはキー "w" に関連付けられた値を正常に出力します。

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}

Nil Map

この問題は、ネストされたマップが存在しない場合に発生します。初期化された。マップ タイプのゼロ値は nil です。 nil マップにインデックスを付けると、実行時エラーが発生します。たとえば、上記のコードが次のように変更された場合:

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}

プログラムは次のエラーで失敗します:

panic: runtime error: assignment to entry in nil map

この問題を解決するには、ネストされたマップを事前に初期化する必要があります。エントリに値を代入する:

func main() {
    var data = map[string]map[string]string{}

    data["a"] = map[string]string{}
    data["b"] = make(map[string]string)
    data["c"] = make(map[string]string)

    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}

または、複合リテラルを使用して、ネストされたリテラルを初期化することもできます。マップ:

func main() {
    var data = map[string]map[string]string{
        "a": map[string]string{},
        "b": map[string]string{},
        "c": map[string]string{},
    }

    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}

以上がGo でネストされたマップを安全に処理し、ランタイム エラーを回避する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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