Maison > développement back-end > Golang > Comment puis-je empêcher « erreur d'exécution : adresse mémoire non valide ou déréférencement de pointeur nul » dans My Go Web Crawler ?

Comment puis-je empêcher « erreur d'exécution : adresse mémoire non valide ou déréférencement de pointeur nul » dans My Go Web Crawler ?

DDD
Libérer: 2024-12-09 02:24:14
original
1014 Les gens l'ont consulté

How Can I Prevent

Comprendre le problème "Erreur d'exécution : adresse mémoire non valide ou déréférencement de pointeur nul"

Dans la programmation Go, l'"erreur d'exécution : adresse mémoire non valide ou déréférencement de pointeur nul" se produit souvent lors de l’accès ou du déréférencement d’une mémoire non valide. Cette erreur peut survenir dans divers contextes, notamment lors d'opérations réseau comme les requêtes HTTP.

Dépannage du Webcrawler

Concernant votre webcrawler, l'erreur est probablement liée à l'accès au corps de la réponse (resp.Body) sans en vérifiant d'abord les erreurs. Dans la fonction basicFetcher, par exemple, si http.Get renvoie une erreur, la variable resp sera nulle et les tentatives ultérieures d'accès à resp.Body échoueront en raison du déréférencement du pointeur nul.

Gestion appropriée des erreurs

Pour résoudre ce problème, il est crucial de gérer les erreurs de manière appropriée. Pensez à modifier votre fonction basicFetcher comme suit :

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

Maintenant, si http.Get ou ioutil.ReadAll rencontre une erreur, la fonction reviendra gracieusement, empêchant l'erreur de déréférencement de pointeur nul.

Renvoi des résultats d'erreur

Comme suggéré par twotwotwo, c'est une bonne pratique de renvoyer une paire (résultat, erreur) à partir de vos fonctions. Cela vous permet de gérer les erreurs et de terminer la fonction si nécessaire. En renvoyant une erreur, vous pouvez fournir plus de contexte pour l'erreur et permettre une meilleure gestion des erreurs dans votre fonction principale.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal