ホームページ >バックエンド開発 >Golang >連続した Golang HTTP リクエストにより予期しない EOF エラーが発生するのはなぜですか?

連続した Golang HTTP リクエストにより予期しない EOF エラーが発生するのはなぜですか?

DDD
DDDオリジナル
2024-12-15 22:15:13568ブラウズ

Why Do Successive Golang HTTP Requests Result in Unexpected EOF Errors?

連続呼び出し中の Golang HTTP リクエストでの予期しない EOF エラー

標準の net/http パッケージの使用中に発生した異常なエラーを解決しようとしました、複数の HTTP リクエストを行うときに断続的な EOF (ファイルの終わり) 例外が発生するとユーザーが報告しました。

ユーザーが提供したコード スニペットには、GET および PUT リクエストのテスト関数が含まれており、実行中にエラーが散発的に発生しました。

問題のトラブルシューティング

コードを分析した結果、根本的な原因は不適切なリクエスト処理に関連していることが判明しました。具体的には、Req.Close フィールドが明示的に true に設定されていませんでした。

提供されたコードでは、応答本文の終了を処理するために defer resp.Body.Close() 構文が使用されていました。ただし、これでは不十分であることが判明し、リクエストを適切に処理するには Req.Close を true に設定する必要がありました。

更新されたコード

次のコード スニペットは、正しく設定する方法を示しています。 Req.Close:

client := &http.Client{}
req, err := http.NewRequest(method, url, httpBody)

// **NOTE** this !!
req.Close = true

req.Header.Set("Content-Type", "application/json")
req.SetBasicAuth("user", "pass")
resp, err := client.Do(req)
if err != nil {
    // whatever
}
defer resp.Body.Close()

response, err = ioutil.ReadAll(resp.Body)
if err != nil {
    // Whatever
}

解決策

Req.Close を true に設定すると、HTTP リクエストが正しく閉じられることが効果的に保証され、EOF エラーの発生が防止されます。この変更を実装することで、複数のリクエストを行ったときにユーザーのテスト関数が一貫して合格し、問題が解決されました。

以上が連続した Golang HTTP リクエストにより予期しない EOF エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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