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

Pourquoi la modification d'un tableau à l'intérieur d'une fonction dans Go modifie-t-elle également une variable affectée au même tableau en dehors de la fonction ?

Susan Sarandon
Libérer: 2024-10-26 01:25:28
original
795 Les gens l'ont consulté

Why does modifying an array inside a function in Go also change a variable assigned to the same array outside the function?

Traitement des tableaux en Go

En Go, les tableaux sont des valeurs, pas des références. Par conséquent, attribuer un tableau à un autre copiera tous les éléments. De plus, transmettre un tableau à une fonction fournira une copie, pas un pointeur.

Explication du code

Considérez l'exemple de code suivant :

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

Dans ce code, la fonction shuffle prend un tableau comme entrée et mélange ses éléments. Cependant, même si nous attribuons le tableau d'origine à une nouvelle variable arr2 avant d'appeler shuffle, les modifications apportées à arr dans la fonction sont reflétées dans arr2.

Tranches vs tableaux

Go fait la distinction entre les tranches et les tableaux. Alors que les tableaux sont des listes de valeurs de longueur fixe, les tranches sont des références aux tableaux sous-jacents. Dans l’exemple de code, arr et arr2 font tous deux référence au même tableau sous-jacent. Par conséquent, toutes les modifications apportées à arr sont également appliquées à arr2. Pour créer une copie distincte d'un tableau, la tranche doit être allouée à l'aide de make :

arr := []int{1, 2, 3, 4, 5}
arr2 := make([]int, len(arr))
copy(arr2, arr)
Copier après la connexion

Dans cette version mise à jour, arr2 n'est plus une référence au tableau d'origine, donc les modifications apportées à arr n'affecteront pas arr2.

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