Go: パニック: ランタイム エラー: 無効なメモリ アドレスまたは Nil ポインター逆参照
質問:
Go プログラムを実行すると、次のような問題が発生しますパニック:
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x38 pc=0x26df] goroutine 1 [running]: main.getBody(0x1cdcd4, 0xf800000004, 0x1f2b44, 0x23, 0xf84005c800, ...) /Users/matt/Dropbox/code/go/scripts/cron/fido.go:65 +0x2bb main.getToken(0xf84005c7e0, 0x10) /Users/matt/Dropbox/code/go/scripts/cron/fido.go:140 +0x156 main.main() /Users/matt/Dropbox/code/go/scripts/cron/fido.go:178 +0x61
エラーをキャッチしようとしましたが、原因を特定できません。このプログラムは、コードにリストされている API サーバーにアクセスできないマシン上で実行されますが、適切なエラー応答が返されると予想していました。
この問題の解決を手伝ってもらえますか?
回答:
パニックは、client.Do() メソッドで非 nil エラーをチェックする前に res.Body にアクセスすることが原因である可能性があります。 func (*Client) Do のドキュメントによると、クライアント ポリシーまたは HTTP プロトコル エラーが原因の場合はエラーが返されます。ただし、2xx 以外の応答はエラーを引き起こさず、resp.Body フィールドには nil 以外の値が含まれています。
問題を解決するには、client.Do() を呼び出した直後にエラーを確認してください。
res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close()
以上がGo Panic: 「無効なメモリ アドレスまたは Nil ポインタ参照解除」エラーをデバッグするには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。