Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-10-26 01:23:27
original
282 Les gens l'ont consulté

 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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!