ホームページ > バックエンド開発 > Golang > Go Web クローラーでの「無効なメモリー アドレスまたは Nil ポインター逆参照」エラーのトラブルシューティング方法

Go Web クローラーでの「無効なメモリー アドレスまたは Nil ポインター逆参照」エラーのトラブルシューティング方法

Susan Sarandon
リリース: 2024-12-04 18:25:16
オリジナル
960 人が閲覧しました

How to Troubleshoot

無効なメモリ アドレスまたは Nil ポインター逆参照エラー: Go の Web クローラーのトラブルシューティング

「実行時エラー: 無効なメモリ アドレスまたはGo で nil pointer dereference」エラーが発生した場合は、問題がどこにあるのかを判断することが重要です。 Web クローラーの初心者が直面する一般的なシナリオを詳しく見てみましょう。

提供されているコードは、Web クローリング用に 2 つの関数、advancedFetcher と BasicFetcher を使用しています。どちらの関数も、makeGetRequest ユーティリティを使用して HTTP リクエストを作成します。ただし、特定の状況下では前述のエラーが発生する可能性があります。

問題の理解

専門家は、コード全体のエラーを入念にチェックすることを推奨しています。この方法を実行しても、同じエラーが発生する可能性があります。何が起こっているのかを詳しく調べてみましょう。

basicFetcher 関数では、リクエストが行われた後に ioutil.ReadAll(resp.Body) が呼び出されます。リクエストが失敗した場合 (つまり、err != nil)、本文は引き続き読み取られますが、この状況では resp.Body が nil である可能性があるため、問題のエラーが発生する可能性があります。

問題の解決

この問題に対処するには、(結果、エラー) タプルを返すように BasicFetcher 関数を変更することを検討してください。これにより、エラーが発生した場合に正常に終了できます。リビジョンの例を次に示します:

func basicFetcher(uri string, c chan int) (int, error) {
    fmt.Println("Getting: ", uri)
    resp, err := http.Get(uri)
    if err != nil {
        return 0, err
    }
    defer resp.Body.Close()
    _, err = ioutil.ReadAll(resp.Body)
    if err != nil {
        return 0, err
    }
    return resp.StatusCode, nil
}
ログイン後にコピー

追加のヒント

  • エラーの確認: 特に各ステップでのエラーを徹底的に確認します。応答をフェッチおよび読み取るとき。
  • 慣用句を使用するGo: エラー タプルを返して潜在的なエラーを適切に処理するなど、慣用的な Go プラクティスを採用します。
  • 予想されるエラーの処理: Web クローリング中に発生する可能性のある特定のエラーを予測して処理します。 HTTP エラーまたは接続タイムアウトとして。

以上がGo Web クローラーでの「無効なメモリー アドレスまたは Nil ポインター逆参照」エラーのトラブルシューティング方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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