Go : Panique : Erreur d'exécution : adresse mémoire non valide ou déréférencement de pointeur nul
Lors de l'exécution d'un programme Go, vous pouvez rencontrer une panique avec le message d'erreur suivant :
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x38 pc=0x26df]
Cette erreur indique souvent un problème dans la façon dont votre programme gère les adresses mémoire ou les pointeurs. Décomposons une cause possible :
Problème : Gestion incorrecte des erreurs
Dans le code Go fourni, il y a un problème dans la fonction getBody lors du traitement de la réponse du HTTP client :
if err != nil { return nil, err } ... if err != nil { return nil, err }
La première vérification if err != nil a lieu avant d'accéder à la réponse body:
if err != nil { return nil, err } res, err := client.Do(req)
Cependant, l'instruction defer pour fermer le corps de la réponse (res.Body) s'exécute immédiatement, avant même la vérification des erreurs. Cela pourrait entraîner une tentative prématurée de fermeture du corps et conduire à l'erreur « Adresse mémoire invalide ».
Solution :
Pour résoudre ce problème, déplacez l'erreur vérifier avant d'accéder et de fermer le corps de la réponse :
res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close()
Ce faisant, le code vérifie correctement toute erreur potentielle avant de travailler avec le corps de la réponse, empêchant ainsi le Erreur "adresse mémoire invalide".
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!