ホームページ >バックエンド開発 >Golang >Go Panic: 無効なメモリ アドレスまたは Nil ポインター逆参照: 間違ったエラー処理を修正する方法

Go Panic: 無効なメモリ アドレスまたは Nil ポインター逆参照: 間違ったエラー処理を修正する方法

DDD
DDDオリジナル
2025-01-05 13:00:40239ブラウズ

Go Panic: Invalid Memory Address or Nil Pointer Dereference: How to Fix Incorrect Error Handling?

Go: パニック: ランタイム エラー: 無効なメモリ アドレスまたは Nil ポインター逆参照

Go プログラムを実行すると、次のようなパニックが発生することがあります。次のエラー メッセージ:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x38 pc=0x26df]

このエラーは、多くの場合、方法に問題があることを示しています。プログラムはメモリ アドレスまたはポインタを処理します。考えられる原因を分析してみましょう:

問題: 間違ったエラー処理

提供された Go コードでは、HTTP からの応答を処理するときに getBody 関数に問題があります。 client:

if err != nil {
    return nil, err
}
...
if err != nil {
    return nil, err
}

応答にアクセスする前に最初の if err != nil チェックが発生しますbody:

if err != nil {
    return nil, err
}

res, err := client.Do(req)

ただし、応答本文 (res.Body) を閉じるための defer ステートメントは、エラー チェックの前であっても、すぐに実行されます。これにより、本体を閉じるのが早まって「無効なメモリ アドレス」エラーが発生する可能性があります。

解決策:

この問題を解決するには、エラーを移動します。応答本文にアクセスして閉じる前にチェックしてください:

res, err := client.Do(req)

if err != nil {
    return nil, err
}

defer res.Body.Close()

これにより、コードは処理する前に潜在的なエラーを正しくチェックします。応答本文を使用して、「無効なメモリ アドレス」エラーを防ぎます。

以上がGo Panic: 無効なメモリ アドレスまたは Nil ポインター逆参照: 間違ったエラー処理を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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