Passer des tableaux aux fonctions et les modifier dans Golang
Dans les langages de programmation comme C , les tableaux sont implicitement passés par référence lorsqu'ils sont transmis aux fonctions. Cependant, en Golang, ce comportement est différent, ce qui peut prêter à confusion pour ceux venant d'autres langues.
La différence : tableaux vs tranches
Dans le code fourni exemple :
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) reverse(tab) fmt.Println(tab) } 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>
Il semble que le tableau soit passé par valeur (pas par référence), mais la fonction inverse modifie toujours le tableau d'origine. La clé ici est qu'en Golang, "tab" n'est pas un tableau mais une slice.
Les tranches dans Go
Les tranches sont des données légères structures qui représentent une section contiguë d’un tableau. Ils consistent en un pointeur vers le tableau sous-jacent, une longueur et une capacité. Lorsqu'une tranche est transmise à une fonction, seules les informations d'en-tête (pointeur, longueur, capacité) sont copiées, et non l'intégralité du tableau sous-jacent.
Passer des tranches par référence
Par conséquent, toute modification apportée à la tranche dans la fonction affecte le tableau sous-jacent, car elle pointe vers les mêmes données. Dans l'exemple ci-dessus, la fonction reverse modifie les éléments de la tranche, ce qui à son tour affecte l'onglet du tableau d'origine.
Conclusion
Alors que les tableaux dans Go sont passés par valeur (copie), les tranches sont passées par référence (partager les données sous-jacentes). Comprendre cette distinction est crucial lors de la transmission de tableaux ou de tranches aux fonctions dans Golang pour éviter un comportement inattendu.
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!