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
DDDoriginal
2024-12-09 02:24:14981parcourir

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
}

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:
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