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) } }
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)
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!