Go est-il adapté aux structures de données et aux algorithmes ?
Oui. Il se compile en code natif rapide, sa syntaxe est assez réduite pour que l'algorithme soit l'essentiel de ce que tu lis, et les génériques (depuis Go 1.18) rendent réutilisable une pile ou un tas typés. La contrepartie, c'est une bibliothèque standard minimaliste : au-delà des slices, des maps, de container/list et de container/heap, tu écris les structures toi-même, ce qui, dans un parcours d'apprentissage, est justement le but. Go fait aussi tourner une grande partie de l'infrastructure cloud actuelle, Docker et Kubernetes compris, ce qui en fait un langage d'entretien naturel pour les postes backend.
Quels types et packages Go correspondent à quelles structures de données ?
Une slice est un tableau dynamique, et avec append et le redécoupage, c'est aussi ta pile ; une map est une table de hachage, et map[T]struct{} est l'ensemble idiomatique ; container/list est une liste doublement chaînée ; et container/heap gère un tas binaire sur tout type qui implémente heap.Interface. Il n'y a ni type file, ni arbre, ni trie, ni graphe : ceux-là, tu les construis toi-même, aux étapes un et deux.
Comment fonctionne container/heap en Go ?
Tu implémentes heap.Interface sur un type slice à toi : Len, Less et Swap, issus de sort.Interface, plus Push et Pop, qui se contentent d'ajouter et de retirer à la fin de la slice. Tu appelles ensuite les fonctions du package, heap.Push et heap.Pop, jamais tes propres méthodes, et ce sont elles qui font remonter et descendre les éléments pour maintenir l'ordre. Cela paraît étrange tant que tu n'as pas écrit un tas toi-même, ce que te fait faire l'étape deux.
Pourquoi le parcours d'une map en Go donne-t-il un ordre différent à chaque fois ?
Parce que Go rend volontairement aléatoire l'ordre d'itération des maps, pour qu'aucun programme n'en vienne à en dépendre. Une table de hachage n'a d'ordre significatif dans aucun langage ; Go s'assure simplement que tu le remarques. Quand l'ordre compte, comme dans une sortie qu'un test compare, rassemble les clés dans une slice et trie-la, ou garde une slice à côté de la map.
Quels cours de ce parcours ne sont pas enseignés en Go ?
Trois : la programmation dynamique et la série d'entretiens en Python, enseignées en Python, et la manipulation de bits, enseignée en C++. Ces trois cours figurent après les étapes, chacun avec un lien qui l'ouvre dans son propre langage. En Go, une table de mémoïsation est une slice ou une map, et Go ajoute un opérateur bit à bit qui manque à C++ : &^, AND NOT, qui efface dans son opérande de gauche chaque bit à 1 dans celui de droite.
Faut-il connaître Go avant de commencer ce parcours ?
Au minimum les structs, les pointeurs, les slices, les maps et les méthodes ; les génériques aident, et tu peux les apprendre en chemin. Si c'est nouveau pour toi, le cours Go de Coddy t'y amène d'abord, gratuitement, et ce parcours prend le relais là où il s'arrête.