Maison  >  Article  >  développement back-end  >  Les tranches et les tableaux Go sont-ils traités de la même manière lorsqu'ils sont attribués et transmis ?

Les tranches et les tableaux Go sont-ils traités de la même manière lorsqu'ils sont attribués et transmis ?

DDD
DDDoriginal
2024-10-26 01:23:27269parcourir

 Are Go Slices and Arrays Treated the Same When Assigned and Passed?

Traitement des tranches par rapport aux tableaux en Go

En Go, les tranches et les tableaux ont des comportements distincts malgré leurs similitudes. Cette distinction affecte la façon dont ils sont traités lorsqu'ils sont attribués et passés en tant qu'arguments.

Tableaux

Les tableaux sont des collections d'éléments de taille fixe, chaque élément occupant un index spécifique. L'attribution d'un tableau à un autre entraîne une copie de tous les éléments, quelle que soit leur taille. Cela signifie que toute modification apportée à un tableau attribué n'affectera pas le tableau d'origine.

Slices

Les tranches, en revanche, sont des références flexibles et dynamiques à un tableau sous-jacent. Lorsque vous affectez une tranche à une autre variable, vous créez une référence au même tableau sous-jacent, pas une copie. Les modifications apportées à l'une ou l'autre tranche affecteront le tableau sous-jacent et, par conséquent, les deux références.

Exemple de code

Considérez le code Go suivant :

<code class="go">import (
    "fmt"
    "rand"
    "time"
)

func shuffle(arr []int) {
    rand.Seed(time.Nanoseconds())
    for i := len(arr) - 1; i > 0; i-- {
        j := rand.Intn(i)
        arr[i], arr[j] = arr[j], arr[i]
    }
}

func main() {
    arr := []int{1, 2, 3, 4, 5}
    arr2 := arr
    shuffle(arr)
    for _, i := range arr2 {
        fmt.Printf("%d ", i)
    }
}</code>

Dans cet exemple, l'intention est de mélanger la tranche arr2 tout en laissant arr intact. Cependant, en raison du fonctionnement des tranches, arr et arr2 font référence au même tableau sous-jacent. Par conséquent, lorsque shuffle() échange des éléments dans arr, les changements sont également reflétés dans arr2.

Conclusion

Le résultat est "1 5 2 4 3", indiquant le mélange de arr et arr2 . Ce comportement résulte de la distinction entre les tranches (qui sont des références) et les tableaux (qui sont des collections de taille fixe). Lorsque vous travaillez avec des tableaux dans Go, il est important d'être conscient de cette différence fondamentale.

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