Maison >développement back-end >Golang >Pourquoi le mélange d'une tranche affecte-t-il une autre tranche faisant référence au même tableau sous-jacent ?
La documentation sur http://golang.org/doc/effective_go.html#arrays met en évidence la nature basée sur la valeur des tableaux dans Go, où l'attribution d'un tableau à un autre crée une copie de tous les éléments. Ce principe s'applique également aux arguments de fonction, où la fonction reçoit une copie du tableau, pas un pointeur.
Sur la base de ces informations, on pourrait s'attendre à ce que le code suivant aboutisse à des tableaux distincts pour arr2 et arr dans le Fonction main() :
<code class="go">package main 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>
Cependant, le code mélange également arr2 de manière inattendue. Ce comportement provient du fait que le code fourni fonctionne sur des tranches, pas sur des tableaux.
Go utilise les tranches comme un moyen plus flexible et plus efficace de gérer des séquences de valeurs. . Les tranches sont des références à des tableaux sous-jacents, et l'attribution d'une tranche à une autre duplique simplement la référence.
Dans l'exemple de code, la ligne arr := []int{1, 2, 3, 4, 5} crée un tranche qui fait référence à un tableau sous-jacent anonyme d’entiers. Lorsque arr2 := arr est exécuté, il crée une nouvelle tranche qui fait également référence au même tableau sous-jacent.
Puisque arr et arr2 font tous deux référence au même tableau sous-jacent, la modification de arr dans la fonction shuffle() affecte également arr2. Ce comportement s'aligne sur le principe d'assigner une tranche à une autre en dupliquant simplement la référence, sans créer de nouvelle copie du tableau sous-jacent.
Par conséquent, le code mélange correctement arr et arr2 car ils font tous deux référence au même sous-jacent. tableau d'entiers.
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!