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 ?
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.
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.
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.
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!