ホームページ >バックエンド開発 >Golang >My Go Web Crawler での「実行時エラー: 無効なメモリ アドレスまたは nil ポインター逆参照」を防ぐにはどうすればよいですか?

My Go Web Crawler での「実行時エラー: 無効なメモリ アドレスまたは nil ポインター逆参照」を防ぐにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-09 02:24:14983ブラウズ

How Can I Prevent

「ランタイム エラー: 無効なメモリ アドレスまたは nil ポインタ逆参照」問題について

Go プログラミングにおける「ランタイム エラー: 無効なメモリ アドレスまたは nil ポインタ逆参照」の問題について多くの場合、無効なメモリにアクセスしたり逆参照したりするときに発生します。このエラーは、HTTP リクエストなどのネットワーク操作を含むさまざまな状況で発生する可能性があります。

Web クローラーのトラブルシューティング

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。