Maison > développement back-end > Golang > Comment gérer les erreurs « adresse mémoire invalide ou déréférencement de pointeur nul » lors de l'accès aux champs de carte dans Go ?

Comment gérer les erreurs « adresse mémoire invalide ou déréférencement de pointeur nul » lors de l'accès aux champs de carte dans Go ?

Susan Sarandon
Libérer: 2024-12-03 15:24:11
original
835 Les gens l'ont consulté

How to Handle

Erreur d'accès à la carte : "adresse mémoire invalide ou déréférencement de pointeur nul"

Problème :

Lorsque vous tentez d'accéder à un champ de structure à partir d'une carte, une erreur se produit indiquant une adresse mémoire invalide ou un déréférencement de pointeur nul. Cette erreur survient spécifiquement sur la ligne où une tranche de pointeurs (*string) est affectée à un champ dans un guardduty.Condition struct.

Code :

condition := map[string]*guardduty.Condition{}
condition["id"].Equals = strPtr
Copier après la connexion

Erreur :

invalid memory address or nil pointer dereference
gdreport/main.go:30 +0x1e6
Copier après la connexion

Explication :

L'erreur vient du fait que la carte des conditions est initialement une carte vide de pointeurs. Lorsque vous accédez à la clé « id », vous essayez effectivement de récupérer une valeur nulle de *guardduty.Condition. Ceci explique l'erreur, car l'accès au champ Equals d'un pointeur nul n'est pas valide.

Solution :

Pour résoudre ce problème, vous devez d'abord vérifier si le "id " La clé existe dans la carte de conditions. Si ce n'est pas le cas, vous pouvez initialiser un nouveau guardduty.Condition et l'attribuer à la clé "id".

Code mis à jour :

if _, ok := condition["id"]; !ok { // <nil> false
    log.Println("Pointer is null")
} else {
    // Init new guardduty.Condition
    // and assign to required key
    nc := &guardduty.Condition{Equals: strPtr}
    condition["id"] = nc
}
Copier après la connexion

En vérifiant l'existence de la clé en premier, vous pouvez éviter de tenter d'accéder à un pointeur nul, en vous assurant que le code s'exécute comme prévu.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal