Dans le développement Web, il est souvent nécessaire de gérer les réponses des requêtes HTTP. La fonction http.Get(url) de Go est utilisée à cet effet. Cependant, cela soulève la question : est-il nécessaire de fermer le corps de la réponse si une erreur survient lors de la requête GET ?
Considérations sur la gestion des erreurs
Selon les principes généraux de programmation , lorsqu'une fonction renvoie plusieurs valeurs, dont l'une est une erreur, l'erreur doit d'abord être vérifiée avant de continuer. Les valeurs sans erreur doivent renvoyer des valeurs nulles en présence d'une erreur.
Comportement de http.Get()
La documentation de http.Get() ne le fait pas s'écarter de ce principe. Par conséquent, la gestion des erreurs doit être traitée comme suit :
res, err := http.Get(url) if err != nil { log.Printf("Error: %s\n", err) return } defer res.Body.Close() // Read/work with body
Cas particulier pour les redirections
JimB confirme que lorsqu'une erreur non nulle est renvoyée, même si le la réponse est non nulle, il n'est pas nécessaire de la fermer. Il existe cependant une exception en cas d'erreurs de redirection. La réponse peut contenir du contexte et des informations supplémentaires sur l'endroit où la redirection a échoué.
Fermeture du corps de réponse non nul avec une erreur
Si vous souhaitez fermer le corps de la réponse lorsqu'il y a une réponse et une erreur non nulle, vous pouvez le faire dans l'un de ces façons :
res, err := http.Get(url) if err != nil { log.Printf("Error: %s\n", err) } if res != nil { defer res.Body.Close() // Read/work with body }
res, err := http.Get(url) if err != nil { log.Printf("Error: %s\n", err) } if res == nil { return } defer res.Body.Close() // Read/work with body
Garantie d'un corps non nul
La documentation de http.Response garantit que Response.Body ne sera jamais nul, même si il n'y a pas de données de réponse ou le corps a un zéro length.
Conclusion
En conclusion, il n'est pas nécessaire de fermer le corps de la réponse en cas d'erreur de http.Get(), sauf si l'erreur est liée à une réorientation. Cependant, il est prudent de fermer le corps si la réponse est non nulle, en utilisant l'une des approches décrites ci-dessus.
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!