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