Maison > développement back-end > Golang > Dois-je fermer le corps de la réponse après une erreur HTTP GET dans Go ?

Dois-je fermer le corps de la réponse après une erreur HTTP GET dans Go ?

Susan Sarandon
Libérer: 2024-12-22 05:07:09
original
453 Les gens l'ont consulté

Do I Need to Close the Response Body After an HTTP GET Error in Go?

Les erreurs HTTP nécessitent-elles la fermeture du corps de réponse ?

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
Copier après la connexion

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
}
Copier après la connexion
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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal