Junior
Quelle est la différence clé entre slices et tableaux en Go?
sobes.tech IA
Réponse de l'IA
Les slices sont des vues modifiables des tableaux.
| Caractéristique | Tableau (Array) | Slice |
|---|---|---|
| Taille | Fixe, déterminée lors de la création | Dynamique, peut changer |
| Type | [n]T (où n est la taille, T le type) |
[]T (où T est le type) |
| Passage en fonction | Par valeur (copie) | Par référence à l'array sous-jacent, on passe head, len et cap (en fait, une nouvelle structure SliceHeader avec des copies de ces champs) |
| Création | var a [5]int ou b := [3]string{"a", "b", "c"} |
var s []int ou t := []int{1, 2, 3} ou u := make([]int, 5) |
| Performance | Plus prévisible grâce à la taille fixe, peut être meilleur pour de petites tailles | Peut avoir des coûts supplémentaires lors du changement de taille (réallocation de l'array sous-jacent) |
// Exemple de tableau
var arr [3]int = [3]int{1, 2, 3}
// Exemple avec slice créé à partir du tableau
slice := arr[1:] // slice {2, 3}
// Exemple de création de slice
s := []int{10, 20, 30} // array sous-jacent {10, 20, 30}, len = 3, cap = 3
// Modification du slice
s = append(s, 40) // maintenant s {10, 20, 30, 40}. Si la capacité est insuffisante, un nouveau array sous-jacent est créé, len = 4, cap = 6 (habituellement doublant la capacité).
// Modifier un élément du slice modifie l'array sous-jacent
slice[0] = 99 // arr devient {1, 99, 3}
fmt.Println(arr)