Maison >développement back-end >Golang >Comment modifier une tranche passée en argument dans une fonction Go ?

Comment modifier une tranche passée en argument dans une fonction Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-23 07:30:43983parcourir

How Can I Modify a Slice Passed as an Argument in a Go Function?

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 :

  1. Passer un pointeur vers la tranche : En passant un pointeur vers la tranche d'origine, toute modification apportée au sein de la fonction affectera directement la original.
func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}
  1. Renvoyer la tranche modifiée à partir de la fonction : Au lieu de passer un accumulateur, la fonction récursée peut renvoyer la tranche modifiée, éliminant ainsi le besoin de passer une variable d'accumulateur.
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!

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