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 }
Conseils supplémentaires
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!