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>
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 :
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!