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