ホームページ > バックエンド開発 > Golang > Go でマップ フィールドにアクセスするときに「無効なメモリ アドレスまたは nil ポインター逆参照」エラーを処理する方法は?

Go でマップ フィールドにアクセスするときに「無効なメモリ アドレスまたは nil ポインター逆参照」エラーを処理する方法は?

Susan Sarandon
リリース: 2024-12-03 15:24:11
オリジナル
876 人が閲覧しました

How to Handle

マップ アクセス エラー: "無効なメモリ アドレスまたは 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート