- À l’occasion du 16e anniversaire de la publication open source du langage Go, récapitulatif des principales avancées techniques de l’année écoulée et des projets à venir
- Les versions Go 1.24 et 1.25 apportent d’importantes améliorations sur l’ensemble des volets tests, sécurité et performances
synctest, container-aware scheduling, flight recorder et d’autres fonctions renforcent la fiabilité et l’efficacité en environnement de production
- La préparation à la certification FIPS 140-3 des packages cryptographiques et Green Tea GC améliorent la sécurité et les performances
- L’écosystème Go s’étend avec le développement intégré à l’IA et l’automatisation moderne du code, avec un renforcement prévu du support du matériel à grande échelle et de l’IA
Le 16e anniversaire de Go et aperçu des récentes versions
- Célébration, le 10 novembre, du 16e anniversaire de la publication open source de Go
- Go 1.24 a été publié en février 2024, puis Go 1.25 en août, selon le cycle régulier de publication
- Ces deux versions incluent des API pour le développement logiciel fiable, un renforcement de la sécurité et des améliorations des performances du runtime
- L’équipe Go fait évoluer Go pour l’ère de l’IA générative, en développant une intégration IA, des agents et des infrastructures basés sur Go
Principales améliorations du langage et de la bibliothèque standard
- Le package
testing/synctest, introduit à titre expérimental dans Go 1.24 puis officialisé dans Go 1.25, simplifie les tests de code asynchrone et parallèle
- Grâce à la virtualisation du temps, il transforme des tests lents ou instables en tests fiables et immédiats
- Sa conception est profondément intégrée au runtime Go et à la bibliothèque standard
- L’API
testing.B.Loop améliore l’ergonomie de l’ancienne API de benchmark (B.N) et élimine plusieurs pièges classiques
- L’ajout d’API de nettoyage des tests et de sortie de logs basées sur
Context améliore l’efficacité de la gestion des tests
- Go 1.25 introduit le container-aware scheduling, qui ajuste automatiquement le parallélisme à l’intérieur des conteneurs
- Cela évite le CPU throttling et améliore la latence
- La fonctionnalité flight recorder étend le traceur d’exécution afin d’enregistrer en détail les événements juste avant une erreur
Développement logiciel centré sur la sécurité
- Les packages cryptographiques de Go ont été audités par la société de sécurité indépendante Trail of Bits, qui n’a relevé qu’un seul problème de faible gravité
- Grâce à la collaboration entre la Go Security Team et Geomys, Go a obtenu la certification CAVP et achevé la préparation à la certification FIPS 140-3
- Cela améliore l’adoption de Go dans les environnements réglementés et réduit la dépendance à des solutions non officielles existantes
- La bibliothèque standard de Go évolue vers une conception safe by default
- Dans Go 1.24, l’API
os.Root empêche les vulnérabilités de traversée de chemin lors des accès au système de fichiers
Améliorations de l’architecture interne et des performances
- Dans Go 1.24, l’implémentation de
map a été entièrement repensée pour refléter les conceptions modernes de tables de hachage
- Cela améliore les performances, réduit la latence et augmente l’efficacité mémoire
- Le ramasse-miettes Green Tea de Go 1.25 réduit la surcharge du GC de 10 à 40 %
- Il applique un nouvel algorithme adapté au matériel moderne
- Dans Go 1.26, une amélioration supplémentaire de 10 % est prévue sur le matériel compatible AVX-512
- Son activation par défaut est prévue à partir de Go 1.26
Extension de la stack de développement et intégration de l’IA
- Go évolue au-delà du langage pour devenir une plateforme de développement complète
- Le serveur de langage gopls a renforcé ses fonctionnalités avec quatre versions régulières (v0.17 à v0.20)
- Ajout d’analyseurs de code, de refactorings, de la gestion des tags JSON et d’un serveur MCP intégré, entre autres
- Introduction de la fonctionnalité de modernisation automatique du code (modernizer)
- Elle convertit automatiquement les anciens motifs de code en formes modernes et plus sûres
- Intégrée aux suggestions de l’IDE, elle aide à maintenir un code cohérent et favorise l’apprentissage assisté par l’IA
- Dans Go 1.26, la commande
go fix devrait être remaniée pour appliquer en une fois l’ensemble du modernizer
- En collaboration avec Anthropic et la communauté, publication du SDK Go officiel v1.0.0 pour le Model Context Protocol (MCP)
- Il prend en charge les clients et serveurs MCP, sur la base des fonctionnalités MCP de gopls
- L’ADK for Go de Google fournit un framework de développement de systèmes multi-agents au-dessus du SDK MCP
- La concurrence, les performances et la fiabilité de Go démontrent sa pertinence pour le développement d’applications IA en production
Feuille de route et communauté
- Sont prévus : la disponibilité générale de Green Tea GC, le support matériel SIMD et un renforcement de la scalabilité multicœur
- Sont également en cours : une mise à niveau majeure de
encoding/json, le profilage des fuites de goroutines et des améliorations de net/http et unicode
- Extension du langage, des outils et du système de diagnostic pour rapprocher encore Go et l’IA
- Le projet open source Go vise à élargir la communauté de contributeurs et à améliorer la scalabilité du processus de développement
- L’évolution de Go repose sur les contributions de sa communauté d’utilisateurs et de contributeurs et laisse entrevoir une croissance continue
1 commentaires
Commentaires Hacker News
J’aime vraiment Go. Il brille particulièrement dans un environnement monorepo. Quand on ajoute une nouvelle application, il suffit de créer un dossier et d’y mettre un fichier Go avec une fonction
main(). Depuis la racine, ungo install ./...permet de tout compiler rapidement.Quand il faut créer vite un programme CLI, cette simplicité a vraiment été un coup de génie
Avant, on disait que le langage n’était pas le goulot d’étranglement, mais quand j’ai vu Go pour la première fois, je me suis dit : « là, c’est différent ». Il est aussi très rapide à apprendre — sans doute parce que la spécification du langage est petite.
J’ai l’impression d’obtenir 80 % des fonctionnalités de Rust avec 20 % de l’effort
Pour moi, Go ressemble à un Rust excessivement simplifié. La correction automatique du code, les contraintes sur les boucles et même la vérification de la présence d’une clé dans une map sont peu pratiques.
Le traitement des tableaux ou la définition des enum sont aussi maladroits, et avec les règles de linter de l’entreprise, le code se retrouve fragmenté au point de ressembler à du Java d’entreprise.
Malgré tout, les interfaces sont simples et l’apprentissage est rapide.
Si Go avait de vrais enum, une syntaxe de slice naturelle, des itérateurs et une syntaxe abrégée pour déballer les résultats, ce serait bien meilleur
La bibliothèque json par défaut a également beaucoup de problèmes, comme sérialiser une slice vide en
null.Cela dit, la vitesse des outils est rapide, et je reconnais son côté pratique
Le déballage des résultats est discuté depuis longtemps par la communauté, mais aucune solution élégante n’a encore émergé
Si vous supprimez souvent des éléments au milieu d’un tableau, c’est que vous avez choisi la mauvaise structure de données
slices.Delete, et le fait d’imposerif err != niln’est pas un problème du langage mais une question de règles d’équipeJ’ai cru un instant que Go allait sortir pour l’Apple II, et j’ai été brièvement enthousiaste (voir SWEET16)
Il est facile de contribuer à une nouvelle base de code Go.
Grâce à la simplicité du langage et à des outils standard comme gofmt et golangci-lint, toutes les bases de code ont une structure similaire.
Il n’y a pas de querelles sur les outils de build comme dans d’autres communautés de langages
En revanche, le comportement de l’opérateur
%avec les nombres négatifs m’a déroutéL’introduction d’un outil automatique de modernisation du code (modernizer) est intéressante.
À partir de gopls v0.18.0, l’analyse syntaxique permet de repérer les idiomes anciens et de les transformer automatiquement en code plus rapide et plus sûr.
De la même façon que gofmt a créé une cohérence de style, modernizer apportera une cohérence des idiomes
Dans golangci-lint, activer des linters comme exhaustive, exhaustruct et wrapcheck améliore fortement la sécurité et accélère le développement
Dans notre entreprise, nous avons un programme d’onboarding de 10 semaines pour les développeurs backend Go (lien vers le plan)
Cela fait 7 ans que je suis passé de Python à Go, et cela a été un facteur clé du succès de la startup
Au début, j’étais sceptique envers Go, mais c’est maintenant mon langage préféré. Simple, mais puissant.
J’aimerais toutefois qu’il fournisse nativement la vérification de null, les stack traces d’erreur et la vérification exhaustive des sum types
J’ai l’impression que Go serait parfait avec juste un peu plus de fonctionnalités de programmation fonctionnelle.
En particulier, il manque de l’immutabilité, une meilleure gestion de null et la vérification d’exhaustivité des switch.
J’utilise NilAway d’Uber pour compenser, mais ce serait encore mieux avec un support au niveau du système de types