#code #go

Les arrays en Go ont une taille fixe non modifiable. Un array de 8 ints est déclaré de cette façon:

var myArray = [8]int

Une slice en Go décrit une partie d’un array. C’est l’array sous-jacent qui possède réellement la donnée, le slice ne fait que pointer vers une partie de cet array.

La structure de donnée d’un slice est généralement appelée le “slice header” et comporte : - un pointeur vers un élément de l’array (l’index 0 du slice) - la length du slice - la capacity restante de l’array sous jacent (car un slice ne peux pas dépasser la taille de l’array sous-jacent)

Pour créer un slice à partir d’un array:

var mySlice = array[start:end]

A noter que start est inclusif et end est exclusif. Pour s’en souvenir, il suffit de retenir que :

mySlice == mySlice[0:len(mySlice)]

Les slices passées en paramètre de fonction sont passées par valeur, donc modifier la slice en elle même dans une fonction n’aura pas d’impact en dehors. Cependant, l’array sous-jacent est accédé via un pointeur, et modifier ses valeurs aura un impact en dehors de la fonction.

La fonction make permet de déclarer un slice et un array en une seule ligne:

var mySlice = make([]int, length, capacity)

La fonction copy permet de copier une slice dans une autre, et retourne le nombre d’éléments copiés :

var count = copy(newSlice, oldSlice)

La fonction append permet d’ajouter un ou plusieurs éléments à la fin d’une slice, et si la capacité de l’array sous-jacent est dépassée, de créer un nouvel array de plus grande taille

mySlice = append(mySlice, 5)
mySlice = append(mySlice, 5, 3, 2, 4)
mySlice = append(mySlice, otherSlice...)

En Go, une string est une slice de bytes qui est read-only.