Maison  >  Article  >  développement back-end  >  Attacher à la tranche de pointeur

Attacher à la tranche de pointeur

WBOY
WBOYavant
2024-02-06 10:00:071057parcourir

Attacher à la tranche de pointeur

Contenu de la question

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 ?


Bonne réponse


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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer