Les Slices en Go

Introduction aux Slices

Dans le langage de programmation Go, un slice (tranche) représente un pointeur vers une portion d'un tableau. Contrairement aux tableaux classiques, les slices peuvent s'ajuster dynamiquement en taille. Cependant, il est crucial de noter que modifier des éléments d'un slice entraîne également des changements dans le tableau sous-jacent. Chaque slice possède en effet une longueur et une capacité.

Longueur et Capacité

La longueur d'un slice correspond au nombre d'éléments qu'il contient, pouvant être vérifiée en utilisant la fonction len(slice_name). De son côté, la capacité d'un slice représente le nombre d'éléments présents dans le tableau sous-jacent, allant de l'indice de départ du slice jusqu'à la fin de l'array. Vous pouvez obtenir cette valeur avec cap(slice_name).

Création et Initialisation de Slices

Déclaration et initialisation d’un nouveau slice

Les slices peuvent être déclarés et initialisés en une seule ligne de code.
Syntaxe :

new_slice := []datatype{values}

Ici, le slice est déclaré en spécifiant son type de données, suivi d’une liste de valeurs. Aucun dimensionnement n’est précisé dans les crochets [].

Exemple :
Pour créer un nouveau slice d'entiers avec une longueur et une capacité de 5 :

s := []int{1, 2, 3, 4, 5}

Un Slice à partir d’un Tableau Existant

Il est également possible de créer un slice à partir d'un tableau existant.
Syntaxe :

new_slice_from_array := array_name[start_index:end_index]

Le nouveau slice inclura les éléments allant de start_index jusqu'à end_index (l'index de fin étant exclu). Si start_index est omis, le slice débute à la première valeur d'array_name. Si end_index est omis, le slice va jusqu'à la dernière valeur d'array_name.

Exemple :
Pour déclarer un slice pointant sur les éléments d'un tableau de l'indice 2 à 5 (non inclus) :

s := array_name[2:5]

Un Slice Vide

Pour initier un slice vide, vous pouvez employer la fonction make().
Syntaxe :

new_slice := make([]datatype, length, capacity)

Ceci créera un nouveau slice avec une longueur spécifiée de valeur zéro et une capacité définie.

Exemple :
Créer un slice d'entiers initialisé à 0, avec une longueur de 5 et une capacité de 9 :

s := make([]int, 5, 9)

Accéder aux Éléments d’un Slice

Les éléments d’un slice peuvent être récupérés comme ceux d’un tableau.
Syntaxe :

slice_name[element_index]

Pour obtenir la valeur d’un élément, il suffit d'indiquer l'indice de l'élément dans les crochets [] associés au nom du slice.

Exemple de Code :
Voici comment accéder au troisième élément du slice s :

value := s[2]

Ajouter des Éléments à un Slice

Pour ajouter des éléments à un slice, vous pouvez utiliser la fonction append().
Lorsque vous ajoutez des éléments au-delà de la capacité initiale d'un slice, append() permet au runtime de Go de créer un nouveau slice avec une capacité augmentée. Si la longueur du slice est inférieure à 1 024, la capacité double lors de l'ajout de nouveaux éléments ; au-delà, elle augmente de 25 %.

Syntaxe :

new_slice = append(new_slice, values...)

Un ou plusieurs éléments peuvent être ajoutés avec append().

Exemple de Code :
Le code ci-dessous illustre l'utilisation de append() et les modifications subséquentes apportées à la longueur et à la capacité du slice :

s = append(s, 6, 7, 8)