Maison >développement back-end >Golang >Pourquoi les requêtes HTTP Golang successives entraînent-elles des erreurs EOF inattendues ?
Erreurs EOF inattendues dans les requêtes HTTP Golang lors d'appels successifs
Dans le but de résoudre les erreurs inhabituelles rencontrées lors de l'utilisation du package net/http standard , un utilisateur a signalé des exceptions EOF (End of File) intermittentes lors de plusieurs requêtes HTTP successives.
L'extrait de code fourni par l'utilisateur inclut des fonctions de test pour les requêtes GET et PUT, où des erreurs se produisaient sporadiquement lors de l'exécution.
Dépannage du problème
Après avoir analysé le code, il a été découvert que le la cause sous-jacente était liée à un traitement inapproprié des demandes. Plus précisément, le champ Req.Close n'était pas explicitement défini sur true.
Dans le code fourni, la syntaxe defer resp.Body.Close() a été utilisée pour gérer la fermeture du corps de la réponse. Cependant, cela s'est avéré insuffisant et définir Req.Close sur true était nécessaire pour garantir un traitement correct des requêtes.
Code mis à jour
L'extrait de code suivant montre comment définir correctement 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 }
Résolution
Le réglage de Req.Close sur true garantit efficacement que la requête HTTP se ferme correctement, empêchant ainsi l'erreur EOF de se produire. En implémentant ce changement, les fonctions de test de l'utilisateur ont systématiquement réussi lors de plusieurs demandes, résolvant ainsi le problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!