cybercursus

Les maps

13 min · Intermédiaire · 3 octobre 2026

Sommaire
  1. Créer et utiliser une map
  2. Vérifier la présence d’une clé
  3. Supprimer une clé
  4. Parcourir une map
  5. À toi de jouer

Créer et utiliser une map

go
ages := map[string]int{"Alice": 25, "Bob": 30}

fmt.Println(ages["Alice"])  // 25
ages["Claire"] = 28         // ajoute une nouvelle cle
ages["Bob"] = 31            // modifie une cle existante

fmt.Println(len(ages))      // 3

map[string]int déclare le type des clés (string) et le type des valeurs (int) entre crochets.

Attention

Accéder à une clé absente (ages["Zoe"]) ne provoque aucune erreur : elle renvoie silencieusement 0 (la valeur zéro de int), ce qui peut masquer un bug si on ne vérifie pas explicitement la présence de la clé.

Vérifier la présence d’une clé

go
valeur, ok := ages["Zoe"]
fmt.Println(valeur, ok) // 0 false : Zoe est absente

valeur, ok = ages["Alice"]
fmt.Println(valeur, ok) // 25 true : Alice est presente

ok distingue de façon fiable une clé absente (ok à false) d’une clé présente valant justement 0 (ok à true), une ambiguïté impossible à lever avec un simple accès direct.

Supprimer une clé

go
delete(ages, "Bob")
fmt.Println(ages) // map[Alice:25 Claire:28]

delete() ne provoque aucune erreur même si la clé n’existe pas, elle ne fait simplement rien dans ce cas.

Parcourir une map

go
for nom, age := range ages {
  fmt.Println(nom, "a", age, "ans.")
}
// l'ordre de parcours d'une map n'est jamais garanti en Go

Info

Contrairement à un slice, l’ordre de parcours d’une map avec range n’est jamais garanti : deux exécutions successives du même programme peuvent afficher les paires dans un ordre différent.

À toi de jouer

go
stock := map[string]int{"pommes": 10, "bananes": 5}

quantite, existe := stock["cerises"]
fmt.Println(quantite, existe)
Que produit ce code à l'exécution ?
Que renvoie `ages["Zoe"]` si la clé "Zoe" n'existe pas dans la map ages (de type map[string]int) ?
Pourquoi l'idiome `valeur, ok := ages["Alice"]` est-il recommandé plutôt qu'un simple `valeur := ages["Alice"]` pour vérifier la présence d'une clé ?

Pour aller plus loin

Commentaires

Recherche