Le support des génériques était très attendu. Il est même considéré comme le changement le plus important du langage de programmation depuis la sortie de Go 1.0 en 2012. Disponible depuis le 14 décembre en bêta, cette version 1.18 de Go est donc la première version préliminaire du langage open source développé par Google à offrir le support du code générique qui utilise des types paramétrés. La programmation générique apporte une amélioration, car elle donne accès à une représentation de fonctions et de structures de données sous forme générique, avec prise en compte des types. Les génériques peuvent fournir des blocs de construction pour partager le code et faciliter la création de programmes.

Dans un billet de blog, l'équipe de Go a néanmoins rappelé que, comme c’est le cas avec toute fonctionnalité récente et importante, les utilisateurs devaient s’attendre à découvrir quelques bogues. Car les génériques ne devraient pas faire exception à cette règle. C’est pourquoi, ils conseillent aux développeurs d'aborder les génériques avec la prudence qui s’impose. De plus, la prise en charge de certains cas subtils, notamment des types spécifiques de génériques récursifs, a été reportée à des versions ultérieures. Cependant, selon l'équipe de développeurs de Go, certains utilisateurs précoces sont « plutôt satisfaits ». Un bref tutoriel expliquant comment démarrer avec les génériques est disponible. Selon un billet de blog publié en juillet 2019, même si Go gère déjà les types Interface, une capacité proche d’une programmation générique, le langage ne fournissait pas ce que les développeurs de Go souhaitaient offrir avec les génériques. Par exemple, les développeurs adeptes des génériques dans Go voulaient rendre possible l’écriture de fonctions de type Reverse sans qu’il faille se soucier des éléments de type dans un tableau dynamique (Slice).

les autres évolutions dans Go 1.18

Parmi les autres nouveautés de Go 1.18, on peut citer :

- Un support intégré pour l'écriture de tests basés sur le fuzzing, de façon à trouver plus facilement les entrées automatiques qui font planter un programme ou renvoient des réponses invalides.

- La possibilité pour les développeurs de travailler avec plusieurs modules Go simultanément dans un mode d’espace de travail Go, ce qui est important pour les grands projets.

- Une commande go version -m étendue qui enregistre désormais les détails de la construction, comme les indicateurs de compilation.

- La possibilité pour les utilisateurs de sélectionner l'une des quatre versions de l'architecture AMD64 grâce à la variable d'environnement GOAMD64.

- Les ports Windows/Arm et Windows/Arm64 supportent désormais la préemption non coopérative, apportant cette capacité aux quatre ports Windows et, corrigeant, il faut l’espérer du moins, les bogues subtils rencontrés lors de l'appel de fonctions Win32 qui bloquaient pendant de longues périodes.

- Le ramasse-miettes inclut désormais les sources de travail du GC (Garbage Collector) qui ne sont pas dans le heap quand il détermine la fréquence d'exécution. Cette fonction rend la surcharge du GC plus prévisible quand ces sources sont importantes.

La version 1.17 de Go a été publiée en août dernier. Le langage est sans doute plus connu pour avoir servi de base au développement du système de conteneurs Docker. Les développeurs à l’origine de Go souhaitaient proposer un langage de programmation simple et facile à apprendre, avec une forte prise en charge de la concurrence.

La Bêta 1 de Go 1.18 est accessible sur go.dev. Cette version est considérée comme « instable ». La version de production de Go 1.18 est prévue pour février 2022. Les notes de version sont accessibles sur tip.golang.org.