Maison >développement back-end >Golang >Comment modifier une tranche passée en argument dans une fonction Go ?
Passer des tranches en tant qu'arguments avec les modifications de tranche d'origine
Le passage de variables par valeur dans Go limite les effets des modifications de fonction sur la portée de la fonction. Dans les cas où une tranche doit être modifiée en dehors de la fonction, passer une tranche directement comme argument est insuffisant.
Le comportement de la fonction d'ajout de tranche
La fonction d'ajout alloue une nouvelle tranche et copie les éléments de la tranche existante, y compris tous les ajouts effectués dans la fonction. Cependant, la tranche d'origine reste inchangée.
Exemple : Récursion sur une tranche d'accumulation
L'extrait de code fourni tente initialement d'accumuler les messages de validation dans une tranche passée en argument à une fonction récursive. Cependant, les modifications de la fonction ne sont pas reflétées dans la tranche d'origine.
Solutions
Il existe deux solutions principales à ce problème :
func myAppend(list *[]string, value string) { *list = append(*list, value) }
func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage { //...Processing return messages }
Idiomatic Go Approche
Passer des pointeurs vers des tranches est une approche Go idiomatique lorsque la fonction doit modifier la tranche d'origine. Comme démontré dans l'approche de retour de tranche, il est également possible d'éviter le besoin d'accumulateurs en renvoyant la tranche modifiée.
Considérations sur les performances
L'impact sur les performances de la réussite d'un le pointeur par rapport au retour d’une tranche est négligeable dans la plupart des scénarios. Cependant, le comportement précis peut varier en fonction des optimisations du compilateur et de l'utilisation spécifique du code.
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!