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) }
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) }
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
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!