Maison > développement back-end > Golang > Comment résoudre les erreurs « Adresse mémoire invalide ou déréférencement de pointeur nul » dans les robots d'exploration Web Go ?

Comment résoudre les erreurs « Adresse mémoire invalide ou déréférencement de pointeur nul » dans les robots d'exploration Web Go ?

Susan Sarandon
Libérer: 2024-12-04 18:25:16
original
1034 Les gens l'ont consulté

How to Troubleshoot

Adresse mémoire non valide ou erreur de déréférencement de pointeur nul : dépannage des robots d'exploration Web dans Go

Lorsque vous rencontrez l'"erreur d'exécution : adresse mémoire non valide ou nil pointer déréférencement" dans Go, il est important de déterminer où se situe le problème. Examinons un scénario courant auquel sont confrontés les novices en matière d'exploration de sites Web.

Le code fourni utilise deux fonctions pour l'exploration de sites Web, advancedFetcher et basicFetcher. Les deux fonctions effectuent des requêtes HTTP à l'aide de l'utilitaire makeGetRequest. Cependant, ils peuvent déclencher l'erreur susmentionnée dans certaines circonstances.

Comprendre le problème

Les experts suggèrent de vérifier avec diligence les erreurs dans tout le code. Après avoir mis en œuvre cette pratique, vous risquez toujours de rencontrer la même erreur. Examinons ce qui se passe de plus près.

Dans la fonction basicFetcher, ioutil.ReadAll(resp.Body) est invoqué une fois la requête effectuée. Si la requête échoue (c'est-à-dire err != nil), le corps est toujours lu, ce qui peut conduire à l'erreur en question car resp.Body pourrait être nul dans cette situation.

Résoudre le problème

Pour résoudre ce problème, pensez à modifier la fonction basicFetcher pour renvoyer un tuple (résultat, erreur). Cela permet une résiliation gracieuse en cas d’erreur. Voici un exemple de révision :

func basicFetcher(uri string, c chan int) (int, error) {
    fmt.Println("Getting: ", uri)
    resp, err := http.Get(uri)
    if err != nil {
        return 0, err
    }
    defer resp.Body.Close()
    _, err = ioutil.ReadAll(resp.Body)
    if err != nil {
        return 0, err
    }
    return resp.StatusCode, nil
}
Copier après la connexion

Conseils supplémentaires

  • Vérifiez les erreurs : Vérifiez soigneusement les erreurs à chaque étape, en particulier lors de la récupération et de la lecture des réponses.
  • Utilisez Idiomatic Go : Utiliser des pratiques Go idiomatiques, telles que le renvoi de tuples d'erreur pour gérer les erreurs potentielles avec élégance.
  • Gérer les erreurs attendues : Anticiper et gérer les erreurs spécifiques qui peuvent survenir lors de l'exploration du Web, telles que les erreurs HTTP ou la connexion. délais d'attente.

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