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
Susan Sarandonoriginal
2024-12-03 15:24:11843parcourir

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

Erreur :

invalid memory address or nil pointer dereference
gdreport/main.go:30 +0x1e6

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
}

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!

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