マップ アクセス エラー: "無効なメモリ アドレスまたは nil ポインター逆参照"
問題:
マップから構造体フィールドにアクセスしようとすると、無効なメモリ アドレスを示すエラーが発生するか、 nil ポインター逆参照。このエラーは、特にポインタのスライス (*文字列) が Guardduty.Condition のフィールドに割り当てられている行で発生します。 struct.
コード:
condition := map[string]*guardduty.Condition{} condition["id"].Equals = strPtr
エラー:
invalid memory address or nil pointer dereference gdreport/main.go:30 +0x1e6
説明:
このエラーは、条件マップが最初はポインターの空のマップ。 「id」キーにアクセスすると、実質的には *guardduty.Condition の nil 値を取得しようとします。これは、nil ポインターの Equals フィールドへのアクセスが無効であるため、エラーの説明になります。
解決策:
この問題を解決するには、まず「id」が有効かどうかを確認する必要があります。 " キーが条件マップに存在します。そうでない場合は、新しい Guardduty.Condition を初期化し、それを「id」キーに割り当てることができます。
更新されたコード:
if _, ok := condition["id"]; !ok { // <nil> false log.Println("Pointer is null") } else { // Init new guardduty.Condition // and assign to required key nc := &guardduty.Condition{Equals: strPtr} condition["id"] = nc }
最初にキーの存在を確認すると、nil ポインターへのアクセスを回避でき、コードが意図したとおりに実行されます。
以上がGo でマップ フィールドにアクセスするときに「無効なメモリ アドレスまたは nil ポインター逆参照」エラーを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。