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