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