Maison > développement back-end > Golang > Comment puis-je modifier une tranche dans une fonction Go sans affecter l'original ?

Comment puis-je modifier une tranche dans une fonction Go sans affecter l'original ?

Susan Sarandon
Libérer: 2024-12-21 00:15:17
original
475 Les gens l'ont consulté

How Can I Modify a Slice in a Go Function Without Affecting the Original?

Modifier une tranche passée à une fonction

Dans Go, les paramètres sont passés par valeur, ce qui signifie que les modifications apportées à une tranche dans un La fonction n’affecte pas la tranche d’origine. Cela peut poser un problème lors de l'utilisation de fonctions récursives, où vous souhaitez modifier la tranche d'accumulateur.

Passer un pointeur sur la tranche

Pour modifier la tranche d'origine, vous peut passer un pointeur vers la tranche en tant que paramètre de fonction. Cela permet à la fonction de modifier la tranche d'origine via le pointeur.

Par exemple :

func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}
Copier après la connexion

Solution mise à jour

Au lieu de passer un pointeur à la tranche, vous pouvez renvoyer la tranche modifiée à partir de la fonction récursive. Cela permet à la fonction d'accumuler les valeurs dans la tranche et de renvoyer le résultat final à l'appelant.

func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) {
    // ...

    return validate(v, messages)
}
Copier après la connexion

Approche idiomatique

Passer un pointeur vers la tranche ou renvoyer la tranche modifiée sont deux approches idiomatiques dans Go. Le choix de l'approche à utiliser dépend des exigences spécifiques de votre fonction.

Remarque :

Lorsque vous utilisez des pointeurs pour modifier des tranches, il est important de vous assurer que les pointeurs ne sont pas nuls et que les tranches ne sont pas modifiées concomitamment.

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