Maison > développement back-end > Golang > Pourquoi l'ajout à une tranche dans une structure Go ne persiste-t-il pas sans réaffectation ?

Pourquoi l'ajout à une tranche dans une structure Go ne persiste-t-il pas sans réaffectation ?

DDD
Libérer: 2024-12-16 11:36:18
original
797 Les gens l'ont consulté

Why Doesn't Appending to a Slice in a Go Struct Persist Without Reassignment?

Go - Ajout à une tranche dans une structure

Dans Go, les tranches sont des types de référence, ce qui signifie qu'elles contiennent une référence au sous-jacent tableau. Si vous ajoutez un élément à une tranche dans une structure et ne réattribuez pas le résultat à la tranche, les modifications ne seront pas conservées au retour de la fonction.

Considérez le code suivant :

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    return append(box.Items, item)
}
Copier après la connexion

Ici, la méthode AddItem prend un élément et l'ajoute à la tranche d'éléments dans la structure box. Cependant, la méthode n'attribue pas le résultat à la tranche Items, ce qui signifie que la tranche ne sera pas modifiée au retour de la méthode.

Pour résoudre ce problème, vous devez réattribuer le résultat de l'opération d'ajout. à la tranche. Vous pouvez le faire en modifiant la méthode AddItem comme suit :

func (box *MyBox) AddItem(item MyBoxItem) {
    box.Items = append(box.Items, item)
}
Copier après la connexion

Maintenant, lorsque vous appelez la méthode AddItem, la tranche sera mise à jour dans la structure. Vous pouvez le vérifier en appelant la fonction len sur la tranche Items :

item1 := MyBoxItem{Name: "Test Item 1"}
item2 := MyBoxItem{Name: "Test Item 2"}

items := []MyBoxItem{}
box := MyBox{items}

box.AddItem(item1)

fmt.Println(len(box.Items)) // Output: 1
Copier après la connexion

Notez que la méthode AddItem est définie pour le type *MyBox, ce qui signifie que vous devez l'appeler comme box.AddItem(item1) , en passant un pointeur vers la structure box comme argument.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal