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