Maison >développement back-end >Golang >Go Panic : Comment déboguer les erreurs « Adresse mémoire invalide ou déréférencement de pointeur nul » ?
Go : Panique : Erreur d'exécution : adresse mémoire non valide ou déréférencement de pointeur nul
Question :
Lors de l'exécution d'un programme Go, je rencontre ce qui suit panique :
panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x38 pc=0x26df] goroutine 1 [running]: main.getBody(0x1cdcd4, 0xf800000004, 0x1f2b44, 0x23, 0xf84005c800, ...) /Users/matt/Dropbox/code/go/scripts/cron/fido.go:65 +0x2bb main.getToken(0xf84005c7e0, 0x10) /Users/matt/Dropbox/code/go/scripts/cron/fido.go:140 +0x156 main.main() /Users/matt/Dropbox/code/go/scripts/cron/fido.go:178 +0x61
Malgré mes tentatives de détection des erreurs, je ne parviens pas à identifier la cause. Le programme s'exécute sur une machine sans accès aux serveurs API répertoriés dans le code, mais j'ai anticipé une réponse d'erreur appropriée.
Pouvez-vous m'aider à résoudre ce problème ?
Réponse :
La panique est probablement causée par l'accès à res.Body avant de vérifier une erreur non nulle dans la méthode client.Do(). Selon la documentation de func (*Client) Do, une erreur est renvoyée si elle est causée par la politique du client ou par une erreur de protocole HTTP. Cependant, une réponse non-2xx ne provoque pas d'erreur et le champ resp.Body contient toujours une valeur non nulle.
Pour résoudre le problème, vérifiez l'erreur immédiatement après avoir appelé client.Do() :
res, err := client.Do(req) if err != nil { return nil, err } defer res.Body.Close()
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!