Maison >développement back-end >Golang >En quoi le comportement de modification du tableau de Go diffère-t-il de celui de C ?

En quoi le comportement de modification du tableau de Go diffère-t-il de celui de C ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 09:14:27410parcourir

How Does Go's Array Modification Behavior Differ From C  ?

Modification mystérieuse du tableau de Golang : tranches contre tableaux

Contrairement à C , où les tableaux sont intrinsèquement passés par référence, le comportement de Go semble contradictoire. Pour comprendre cet apparent paradoxe, plongeons dans le monde des tranches de Golang.

Lorsque des tableaux sont déclarés dans Go sans spécifier de longueur fixe, ils deviennent des tranches. Ces tranches sont de simples descripteurs qui pointent vers une section d'un tableau sous-jacent. Lorsqu'il est transmis aux fonctions, seul l'en-tête (un pointeur vers le premier élément, la longueur et la capacité) est copié.

Par conséquent, toute modification apportée à la tranche dans la fonction affecte directement la tranche d'origine. En effet, ils font tous deux référence au même tableau sous-jacent. Ce comportement ressemble au mécanisme de passage par référence en C , même si les tableaux eux-mêmes ne sont pas explicitement passés par référence dans Go.

Pour résumer, la distinction de Go découle de la distinction entre tableaux et tranches. Les tableaux sont transmis par valeur, tandis que les tranches sont transmises par référence au tableau sous-jacent. Pour les tranches, toute modification apportée à une fonction sera reflétée dans la tranche d'origine.

Lectures complémentaires pour une plongée approfondie dans les tranches :

  • [Go Slices : Utilisation et composants internes](https://blog.golang.org/go-slices-usage-and-internals)
  • [Tableaux, tranches (et chaînes) : les mécanismes de « ajouter » ](https : //blog.golang.org/slices)

Questions connexes pour référence :

  • [Pourquoi avoir des tableaux dans Go ?](https : //stackoverflow.com/questions/453071/why-have-arrays-in-go)
  • [Les tranches de Golang passent-elles par valeur ?](https://stackoverflow.com/questions/15884824/are- golang-slices-pass-by-value)

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