Le 10 novembre, nous avons célébré le 16e anniversaire de la sortie open source de Go !
\ Nous avons publié Go 1.24 en février et Go 1.25 en août, suivant notre cadence de publication désormais bien établie et fiable. Poursuivant notre mission de construire la plateforme de langage la plus productive pour développer des systèmes de production, ces versions incluaient de nouvelles API pour créer des logiciels robustes et fiables, des avancées significatives dans le bilan de Go en matière de développement de logiciels sécurisés, et d'importantes améliorations sous le capot. Pendant ce temps, personne ne peut ignorer les changements sismiques dans notre industrie apportés par l'IA générative. L'équipe Go applique son état d'esprit réfléchi et sans compromis aux problèmes et opportunités de cet espace dynamique, travaillant à apporter l'approche prête pour la production de Go à la construction d'intégrations IA robustes, de produits, d'agents d'IA et d'infrastructures.
D'abord publié dans Go 1.24 comme une expérience puis intégré dans Go 1.25, le nouveau package testing/synctest simplifie considérablement l'écriture de tests pour du code concurrent et asynchrone. Ce type de code est particulièrement courant dans les services réseau et traditionnellement très difficile à bien tester. Le package synctest fonctionne en virtualisant le temps lui-même. Il prend des tests qui étaient auparavant lents, instables, ou les deux, et les rend faciles à réécrire en tests fiables et presque instantanés, souvent avec seulement quelques lignes de code supplémentaires. C'est aussi un excellent exemple de l'approche intégrée de Go pour le développement logiciel : derrière une API presque triviale, le package synctest cache une intégration profonde avec le runtime Go et d'autres parties de la bibliothèque standard.
\ Ce n'est pas la seule amélioration que le package testing a reçue au cours de l'année écoulée. La nouvelle API testing.B.Loop est à la fois plus facile à utiliser que l'API originale testing.B.N et résout de nombreux pièges traditionnels—et souvent invisibles !—de l'écriture de benchmarks Go. Le package testing dispose également de nouvelles API qui facilitent le nettoyage dans les tests utilisant Context, et qui facilitent l'écriture dans le journal de test.
\ Go et la conteneurisation ont grandi ensemble et fonctionnent très bien l'un avec l'autre. Go 1.25 a lancé la planification consciente des conteneurs, rendant ce couplage encore plus fort. Sans que les développeurs n'aient à lever le petit doigt, cela ajuste de manière transparente le parallélisme des charges de travail Go s'exécutant dans des conteneurs, empêchant la limitation du CPU qui peut affecter la latence de queue et améliorant la préparation à la production de Go dès la sortie de la boîte.
\ Le nouvel enregistreur de vol de Go 1.25 s'appuie sur notre traceur d'exécution déjà puissant, permettant des aperçus profonds du comportement dynamique des systèmes de production. Alors que le traceur d'exécution collectait généralement trop d'informations pour être pratique dans les services de production à long terme, l'enregistreur de vol est comme une petite machine à remonter le temps, permettant à un service de prendre un instantané des événements récents en grand détail après qu'un problème soit survenu.
Go continue de renforcer son engagement envers le développement de logiciels sécurisés, réalisant des avancées significatives dans ses packages de cryptographie natifs et faisant évoluer sa bibliothèque standard pour une sécurité améliorée.
\ Go est livré avec une suite complète de packages de cryptographie natifs dans la bibliothèque standard, qui a atteint deux étapes majeures au cours de l'année écoulée. Un audit de sécurité mené par la société de sécurité indépendante Trail of Bits a donné d'excellents résultats, avec une seule constatation de faible gravité. De plus, grâce à un effort collaboratif entre l'équipe de sécurité Go et Geomys, ces packages ont obtenu la certification CAVP, ouvrant la voie à une certification FIPS 140-3 complète. C'est un développement vital pour les utilisateurs de Go dans certains environnements réglementés. La conformité FIPS 140, auparavant source de friction en raison du besoin de solutions non prises en charge, sera désormais intégrée de manière transparente, répondant aux préoccupations liées à la sécurité, à l'expérience des développeurs, à la fonctionnalité, à la vélocité des versions et à la conformité.
\ La bibliothèque standard de Go a continué d'évoluer pour être sûre par défaut et sûre par conception. Par exemple, l'API os.Root—ajoutée dans Go 1.24—permet un accès au système de fichiers résistant aux traversées, combattant efficacement une classe de vulnérabilités où un attaquant pourrait manipuler des programmes pour accéder à des fichiers censés être inaccessibles. Ces vulnérabilités sont notoirement difficiles à traiter sans le support de la plateforme sous-jacente et du système d'exploitation, et la nouvelle API os.Root offre une solution simple, cohérente et portable.
En plus des changements visibles par l'utilisateur, Go a apporté des améliorations significatives sous le capot au cours de l'année écoulée.
\ Pour Go 1.24, nous avons complètement repensé l'implémentation de map, en nous appuyant sur les idées les plus récentes et les meilleures en matière de conception de tables de hachage. Ce changement est complètement transparent et apporte des améliorations significatives aux performances des map, une latence de queue plus faible pour les opérations de map, et dans certains cas, même des gains de mémoire significatifs.
\ Go 1.25 inclut une avancée expérimentale et significative dans le ramasse-miettes de Go appelée Green Tea. Green Tea réduit les frais généraux de collecte des déchets dans de nombreuses applications d'au moins 10% et parfois jusqu'à 40%. Il utilise un nouvel algorithme conçu pour les capacités et les contraintes du matériel d'aujourd'hui et ouvre un nouvel espace de conception que nous explorons avec enthousiasme.
\ Par exemple, dans la prochaine version Go 1.26, Green Tea réalisera une réduction supplémentaire de 10% des frais généraux du ramasse-miettes sur le matériel qui prend en charge les instructions vectorielles AVX-512—quelque chose qui aurait été presque impossible à exploiter dans l'ancien algorithme. Green Tea sera activé par défaut dans Go 1.26 ; les utilisateurs n'ont qu'à mettre à niveau leur version de Go pour en bénéficier.
Go est bien plus que le langage et la bibliothèque standard. C'est une plateforme de développement logiciel, et au cours de l'année écoulée, nous avons également fait quatre versions régulières du serveur de langage gopls, et avons formé des partenariats pour soutenir de nouveaux cadres émergents pour les applications agentiques.
\ Gopls fournit le support Go à VS Code et à d'autres éditeurs et IDE alimentés par LSP. Chaque version voit une litanie de fonctionnalités et d'améliorations de l'expérience de lecture et d'écriture de code Go (voir les notes de version v0.17.0, v0.18.0, v0.19.0 et v0.20.0 pour tous les détails, ou notre nouvelle documentation des fonctionnalités de gopls !). Parmi les points forts, citons de nombreux analyseurs nouveaux et améliorés pour aider les développeurs à écrire du code Go plus idiomatique et robuste ; le support de refactoring pour l'extraction de variables, l'inlining de variables et les balises de structure JSON ; et un serveur expérimental intégré pour le Model Context Protocol (MCP) qui expose un sous-ensemble des fonctionnalités de gopls aux assistants IA sous forme d'outils MCP.
\ Avec gopls v0.18.0, nous avons commencé à explorer les moderniseurs de code automatiques. À mesure que Go évolue, chaque version apporte de nouvelles capacités et de nouveaux idiomes ; de nouvelles et meilleures façons de faire les choses que les programmeurs Go ont trouvé d'autres façons de faire. Go respecte sa promesse de compatibilité—l'ancienne façon continuera de fonctionner à perpétuité—mais cela crée néanmoins une bifurcation entre les anciens idiomes et les nouveaux idiomes. Les moderniseurs sont des outils d'analyse statique qui reconnaissent les anciens idiomes et suggèrent des remplacements plus rapides, plus lisibles, plus sécurisés, plus modernes, et ce avec une fiabilité à bouton-poussoir. Ce que gofmt a fait pour la cohérence stylistique, nous espérons que les moderniseurs pourront le faire pour la cohérence idiomatique.
\ Nous avons intégré les moderniseurs en tant que suggestions d'IDE, où ils peuvent aider les développeurs non seulement à maintenir des normes de codage plus cohérentes, mais où nous croyons qu'ils aideront les développeurs à découvrir de nouvelles fonctionnalités et à rester à jour avec l'état de l'art. Nous croyons que les moderniseurs peuvent également aider les assistants de codage IA à rester à jour avec l'état de l'art et à combattre leur propension à renforcer les connaissances obsolètes du langage Go, des API et des idiomes. La prochaine version Go 1.26 inclura une refonte totale de la commande go fix longtemps en sommeil pour lui permettre d'appliquer l'ensemble complet des moderniseurs en masse, un retour à ses racines d'avant Go 1.0.
\ À la fin septembre, en collaboration avec Anthropic et la communauté Go, nous avons publié la v1.0.0 du SDK Go officiel pour le Model Context Protocol (MCP). Ce SDK prend en charge à la fois les clients MCP et les serveurs MCP, et sous-tend la nouvelle fonctionnalité MCP dans gopls. Contribuer à ce travail en open source aide à renforcer d'autres domaines de l'écosystème agentique open source en croissance construit autour de Go, comme le récemment publié Agent Development Kit (ADK) pour Go de Google. ADK Go s'appuie sur le SDK Go MCP pour fournir un cadre idiomatique pour la construction d'applications et de systèmes multi-agents modulaires. Le SDK Go MCP et ADK Go démontrent comment les forces uniques de Go en matière de concurrence, de performance et de fiabilité différencient Go pour le développement d'IA en production et nous nous attendons à ce que davantage de charges de travail d'IA soient écrites en Go dans les années à venir.
Go a une année passionnante devant lui.
\ Nous travaillons à faire progresser la productivité des développeurs grâce à la toute nouvelle commande go fix, à un support plus approfondi pour les assistants de codage IA, et à des améliorations continues de gopls et VS Code Go. La disponibilité générale du ramasse-miettes Green Tea, le support natif des fonctionnalités matérielles Single Instruction Multiple Data (SIMD), et le support du runtime et de la bibliothèque standard pour l'écriture de code qui s'adapte encore mieux au matériel multicœur massif continueront d'aligner Go avec le matériel moderne et d'améliorer l'efficacité de la production.
\ Nous nous concentrons sur les bibliothèques de "pile de production" de Go et les diagnostics, y compris une mise à niveau massive (et longue à réaliser) de encoding/json, dirigée par Joe Tsai et des personnes à travers la communauté Go ; le profilage des goroutines fuyantes, contribué par l'équipe des systèmes de programmation d'Uber ; et de nombreuses autres améliorations à net/http, unicode, et d'autres packages fondamentaux. Nous travaillons à fournir des chemins bien éclairés pour construire avec Go et l'IA, en faisant évoluer la plateforme de langage avec soin pour les besoins évolutifs des développeurs d'aujourd'hui, et en construisant des outils et des capacités qui aident à la fois les développeurs humains et les assistants et systèmes IA.
\ En ce 16e anniversaire de la sortie open source de Go, nous regardons également vers l'avenir du projet open source Go lui-même. Depuis ses humbles débuts, Go a formé une communauté de contributeurs florissante. Pour continuer à répondre au mieux aux besoins de notre base d'utilisateurs en constante expansion, surtout en période de bouleversement dans l'industrie du logiciel, nous travaillons sur des moyens de mieux adapter les processus de développement de Go—sans perdre de vue les principes fondamentaux de Go—et d'impliquer plus profondément notre merveilleuse communauté de contributeurs.
\ Go ne serait pas là où il est aujourd'hui sans nos incroyables communautés d'utilisateurs et de contributeurs. Nous vous souhaitons à tous le meilleur pour l'année à venir !
Austin Clements, pour l'équipe Go
\ Cet article est disponible sur The Go Blog sous une licence CC BY 4.0 DEED.
\ Photo par Jason Leung sur Unsplash

