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

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

Susan Sarandon
Susan Sarandonoriginal
2024-12-14 09:34:14422parcourir

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

Go - ajouter à une tranche dans une structure

Dans Go, lorsque vous essayez d'ajouter à une tranche dans une structure, l'erreur la plus courante est ne pas parvenir à réattribuer le résultat à la tranche.

Considérez ce qui suit exemple :

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    box.Items = append(box.Items, item)
    return box.Items
}

La fonction AddItem prend un MyBoxItem et l'ajoute à la tranche Items de la structure MyBox. Il renvoie la tranche mise à jour.

Maintenant, la fonction principale :

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

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

AddItem(box, item1)  // Attempt to add item without fixing assignment

fmt.Println(len(box.Items))

Ce code tente d'appeler la méthode AddItem sur la structure box et de transmettre item1. Cependant, il ne parvient pas à réattribuer le résultat à la tranche box.Items.

Pour résoudre ce problème, le code doit être modifié comme suit :

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    box.Items = append(box.Items, item)
    return box.Items
}

De plus, puisque la fonction AddItem est défini pour le type *MyBox, il doit être appelé box.AddItem(item1).

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