Go プログラミングにおける「ランタイム エラー: 無効なメモリ アドレスまたは nil ポインタ逆参照」の問題について多くの場合、無効なメモリにアクセスしたり逆参照したりするときに発生します。このエラーは、HTTP リクエストなどのネットワーク操作を含むさまざまな状況で発生する可能性があります。
Web クローラーに関して、エラーは、応答本文 (それぞれの Body) へのアクセスに関連している可能性があります。まずエラーをチェックします。たとえば、basicFetcher 関数では、http.Get がエラーを返した場合、resp 変数は nil になり、それ以降の resp.Body へのアクセス試行は nil ポインター逆参照により失敗します。
この問題に対処するには、エラーを適切に処理することが重要です。 BasicFetcher 関数を次のように変更することを検討してください。
func basicFetcher(uri string, c chan int) { resp, err := http.Get(uri) if err != nil { fmt.Println(err) return } defer resp.Body.Close() _, err = ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) return } c <- resp.StatusCode }
これで、http.Get または ioutil.ReadAll でエラーが発生した場合、関数は正常に戻り、nil ポインター逆参照エラーを防ぎます。
twotwotwo が提案しているように、(結果、エラー) ペアを機能。これにより、必要に応じてエラーを処理し、関数を終了することができます。エラーを返すことで、エラーのコンテキストをさらに提供し、メイン関数でのエラー処理を改善できます。
以上がMy Go Web Crawler での「実行時エラー: 無効なメモリ アドレスまたは nil ポインター逆参照」を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。