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 Panic : Comment déboguer les erreurs « Adresse mémoire invalide ou déréférencement de pointeur nul » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 04:45:10695parcourir

Go Panic: How to Debug

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!

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