Maison > développement back-end > Golang > le corps du texte

Attacher à la tranche de pointeur

WBOY
Libérer: 2024-02-06 10:00:07
avant
1053 Les gens l'ont consulté

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
}
Copier après la connexion

Je pense que le problème est au fond, cette ligne :

(*existing).Data = append((*existing).Data, term)
Copier après la connexion

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]
    }
}
Copier après la connexion

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) {
...
Copier après la connexion

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!