#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.