Comprendre la manipulation des tranches dans Go
Dans Go, lors de la manipulation de tranches en tant que propriétés de structures, il est crucial de considérer le passage de valeur. Dans certaines situations, l’ajout à une tranche au sein d’une méthode peut sembler échouer. Examinons les raisons derrière cela et explorons une solution.
Transmission de valeur dans Go Structs
Dans Go, tout est transmis par valeur, ce qui signifie qu'une copie est créée pour chaque valeur transmise. Par conséquent, toute modification apportée à la copie au sein d'une méthode n'affectera pas la valeur d'origine.
Test3 : une tentative d'ajout échouée
Considérez le code suivant :
type Test3 struct { all []int } func (c Test3) run() []int { c.combo() return c.all } func (c Test3) combo() { for i := 0; i < 2; i++ { c.all = append(c.all, i) fmt.Println("Test3 step", i + 1, c.all) } }
Lorsque vous appelez Test3.run(), il apparaît que c.all n'est pas modifié. En effet, la méthode combo() fonctionne sur une copie de Test3 et toutes les modifications apportées dans combo() ne sont pas propagées à la valeur d'origine.
Solution : utilisation de récepteurs de pointeurs
Pour résoudre ce problème, utilisez un récepteur pointeur pour la méthode combo() :
func (c *Test3) combo() { for i := 0; i < 2; i++ { c.all = append(c.all, i) fmt.Println("Test3 step", i + 1, c.all) } }
En utilisant un récepteur pointeur, vous vous assurez que combo() modifie la valeur Test3 d'origine et les modifications sont reflétées au retour de la méthode.
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!