Les slices en Go sont des segments dynamiques d'un tableau.
Contrairement aux tableaux, les slices n'ont pas de taille fixe à la déclaration.
Pour créer une slice, on peut utiliser la fonction built-in make(): s := make([]int, 5).
On peut également créer une slice à partir d'un tableau existant : s := arr[0:3].
Les éléments d'une slice peuvent être accédés de la même manière que pour un tableau : s[0].
Pour connaître la taille d'une slice, on utilise la fonction len(). Pour la capacité (c'est-à-dire la taille maximum que la slice peut atteindre sans ré-allocation), on utilise cap().
Pour ajouter des éléments à une slice, on utilise la fonction append() : s = append(s, 6, 7, 8).
Il faut noter que append() peut provoquer une ré-allocation si la capacité de la slice est dépassée.
Les maps en Go sont des collections non ordonnées de paires clé-valeur.
Pour déclarer une map, on utilise la fonction make(): m := make(map[string]int).
On peut ajouter des paires clé-valeur à une map avec la syntaxe suivante : m["one"] = 1.
Pour accéder à une valeur, on utilise la clé : value := m["one"].
Pour supprimer une clé et sa valeur associée, on utilise la fonction delete() : delete(m, "one").
Pour vérifier si une clé est présente dans une map, on peut utiliser la forme à deux valeurs de l'accès aux éléments de la map : value, ok := m["two"]. Si la clé est présente, ok vaut true et value contient la valeur associée à la clé. Sinon, ok vaut false et value contient la valeur zéro du type de la map.
Pour itérer sur une map, on peut utiliser la boucle range : for key, value := range m { ... }.