go est mon premier langage de programmation et j'essaie d'apprendre les pointeurs en écrivant un programme qui organise les informations en fonction de taxonomies. J'ai quelques difficultés à comprendre comment attacher une tranche de pointeur.
type list struct { taxonomies []taxonomy } func (l *list) add(t taxonomy) { var exists bool var existing *taxonomy for _, taxonomy := range l.taxonomies { if taxonomy.name == t.name { exists = true existing = &taxonomy } } if exists { for _, term := range t.data { termexists := false for _, existingterm := range existing.data { if existingterm.name == term.name { termexists = true break } } if termexists { continue } (*existing).data = append((*existing).data, term) } } else { l.taxonomies = append(l.taxonomies, t) } } type taxonomy struct { name string data []term } type term struct { name, link string }
Je pense que le problème est au fond, cette ligne :
(*existing).Data = append((*existing).Data, term)
En traçant le code dans le débogueur, je peux voir que lorsque l'ajout se produit, la taxonomie stockée dans la variable "existante" est en cours de mise à jour, mais les données de la liste réelle ne le sont pas.
Quelqu'un peut-il me dire où je me trompe ?
l.taxonomies
是 []taxonomy
,因此 taxonomy
值将是该元素的副本,对该副本的更改不会反映在原始 list
valeur.
Vous pouvez parcourir en utilisant l'index pour éviter de copier des valeurs
for i := range l.taxonomies { if l.taxonomies[i].name == t.name { exists = true existing = &l.taxonomies[i] } }
Cependant, il est toujours possible de copier les données transmises à des méthodes telles que append
. Au lieu de cela, il est préférable d'utiliser des pointeurs partout :
type List struct { Taxonomies []*Taxonomy } func (l *List) Add(t *Taxonomy) { ...
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!