Quelles données à l'intérieur du slice sont transmises lors de l'appel de la fonction avec ce slice en argument?
sobes.tech IA
Réponse de l'IA
En Go, un slice est une structure qui contient trois champs : un pointeur vers un tableau, une longueur et une capacité. Lorsqu’un slice est passé à une fonction, seule cette structure est copiée, pas tout le tableau de données.
C’est-à-dire que lors de l’appel d’une fonction, le slice est passé par valeur, mais seuls les métadonnées (pointeur, longueur, capacité) sont copiées, pas les éléments du tableau eux-mêmes. Cela signifie qu’à l’intérieur de la fonction, le slice pointe vers le même tableau de base, et les modifications des éléments du slice à l’intérieur de la fonction seront visibles à l’extérieur.
Exemple :
func modify(slice []int) {
slice[0] = 100 // modifie le premier élément
}
func main() {
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // affichera [100 2 3]
}
Ainsi, lors du passage d’un slice à une fonction, seules les trois champs de la structure du slice sont copiés, mais les données du tableau restent partagées.