Maison > développement back-end > Golang > Go : Les tableaux passent-ils par référence ou par valeur ?

Go : Les tableaux passent-ils par référence ou par valeur ?

Mary-Kate Olsen
Libérer: 2024-10-30 04:17:02
original
451 Les gens l'ont consulté

Go: Do Arrays Pass by Reference or Value?

Golang : percer le mystère du passage des tableaux

Dans cet article, nous approfondissons l'énigme entourant le passage des tableaux dans Golang. Contrairement à d'autres langages où les tableaux sont implicitement passés par référence, l'approche de Golang est distinctive.

Explorer la confusion

Alan A.A. Donovan et Brian W. Kernighan dans "The Go Programming Language" suggèrent que les tableaux dans Go ne sont pas implicitement passés par référence. Cependant, un examen attentif du code suivant peut soulever des questions :

<code class="go">func main() {
    tab := []int{1, 2, 3}
    fmt.Println(tab)
    // Results in [1 2 3]
    reverse(tab)
    fmt.Println(tab)
    // Results in [3 2 1]
}

func reverse(tab []int) {
    for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
        tab[i], tab[j] = tab[j], tab[i]
    }
}</code>
Copier après la connexion

Même si le tableau n'est pas transmis par référence, la fonction reverse modifie le tableau d'origine. Ce comportement semble s'apparenter à C .

La vérité révélée

La clé réside dans la reconnaissance que l'onglet variables (en principal) et l'onglet paramètre (en sens inverse) sont pas des tableaux mais plutôt des tranches d'un tableau sous-jacent. Contrairement aux tableaux, les tranches ne sont que des en-têtes qui décrivent une partie d'un tableau. Lorsque les tranches sont transmises, seuls ces en-têtes sont copiés, pointant vers le même tableau de support.

Distinctions essentielles

En Go, les longueurs des tableaux sont inhérentes à leur type ( par exemple, [3]int), indiquant que les tableaux réels sont transmis par valeur. Cependant, les tranches, étant de simples descripteurs, sont transmises par valeur, mais les modifications apportées à leurs éléments affectent le tableau sous-jacent car il est le même pour toutes les tranches.

Informations supplémentaires

Pour une compréhension plus approfondie, reportez-vous aux ressources suivantes :

  • Go Slices : utilisation et composants internes
  • Arrays, Slices (and Strings) : les mécanismes de « append »
  • Pourquoi avoir des tableaux dans Go ?
  • Les tranches Go sont-elles transmises par valeur ?

Conclusion

L'approche de Go pour transmettre des tableaux est distinct de certaines autres langues. Comprendre la différence entre les tableaux et les tranches est crucial pour comprendre ce comportement. Les tranches, servant d'en-têtes flexibles, permettent de modifier le tableau sous-jacent à travers différentes copies de tranches.

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