La version 1.27 de Go, le langage de programmation développé par Google, est disponible, avec des méthodes génériques, JSON v2, une allocation de mémoire plus rapide et le profilage des fuites de goroutines
Go 1.27, la dernière version du langage de programmation développé par Google, est désormais disponible. Cette mise à jour introduit la prise en charge des méthodes génériques, une nouvelle implémentation de JSON v2, ainsi que des allocations de mémoire plus rapides pour les petits blocs. Elle offre également une détection automatique des fuites de goroutines, de nouvelles fonctionnalités de cryptographie et plusieurs améliorations apportées aux outils.
Go est un langage de programmation de haut niveau et polyvalent, statiquement typé et compilé. Il est réputé pour la simplicité de sa syntaxe et l'efficacité du développement qu'il permet grâce à l'intégration d'une vaste bibliothèque standard répondant à de nombreux besoins des projets courants. Il a été conçu chez Google en 2007 par Robert Griesemer, Rob Pike et Ken Thompson, puis annoncé publiquement en novembre 2009. Sa syntaxe est similaire à celle du C, mais il intègre également un ramasse-miettes, un typage structurel et une concurrence de type CSP.
Le 19 août 2026, l'équipe Go a publié Go 1.27, la dernière mise à jour majeure de ce langage de programmation open source très populaire, six mois après la sortie de Go 1.26. Comme à l'accoutumée, cette version respecte l'engagement de compatibilité avec Go 1 ; ainsi, la quasi-totalité des programmes Go existants devraient continuer à se compiler et à s'exécuter sans modification.
Évolution du langage
La version 1.27 de Go apporte trois mises à jour notables à la spécification du langage. Tout d'abord, les méthodes génériques sont désormais prises en charge. Par exemple, voir math/rand/v2.Rand :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // Prior to Go 1.27, a separate method on Rand had to be added for each type // (unsigned integer methods omitted for brevity). func (r *Rand) Int32N(n int32) int32 func (r *Rand) Int64N(n int64) int64 func (r *Rand) IntN(n int) int // Go 1.27 adds a new generic method that works for all integer types. func (r *Rand) N[Int intType](n Int) Int
Deuxièmement, une clé dans un littéral de structure peut désormais être n'importe quel sélecteur de champ valide pour le type struct, ce qui permet d'initialiser directement les champs des structures imbriquées ou intégrées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 type Habitat struct { Burrow string } type Gopher struct { Name string Habitat // Embedded struct. } // Go 1.27 allows using Burrow as a key directly. g := Gopher{ Name: "Gopher", Burrow: "Burrow #42", }
Enfin, l'inférence de type des fonctions a été généralisée afin de s'appliquer à tous les contextes d'affectation. Les fonctions génériques peuvent désormais être utilisées sans arguments de type explicites dans les littéraux composés, les conversions de type et les envois par canal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 func GenericFormatter[T any](v T) string { return fmt.Sprintf("value: %v", v) } type IntFormatter func(int) string // Go 1.27 infers T = int in composite literals, conversions, and channel sends. formatters := []IntFormatter{GenericFormatter} fn := IntFormatter(GenericFormatter) ch := make(chan IntFormatter, 1) ch <- GenericFormatter
Améliorations apportées aux outils
Pour les projets utilisant Go 1.27 ou une version plus récente, go mod tidy regroupe désormais automatiquement les différents blocs require dans go.mod en une structure standard composée de deux blocs : un bloc direct et un bloc indirect.
Plusieurs nouveaux moderniseurs ont également été intégrés à go fix : atomictypes, embedlit, slicesbackward et unsafefuncs. Et go doc prend désormais en charge les requêtes de type package@version, telles que go doc example.com/pkg@v1.2.3.
Performances et runtime
La version 1.27 de Go apporte une optimisation notable du temps d'exécution. L'allocation de mémoire en fonction de la taille réduit désormais les coûts d'allocation des petits objets (<80 octets) jusqu'à 30 %, ce qui améliore les performances globales d'environ 1 % pour les programmes nécessitant de nombreuses allocations.
Une autre amélioration apportée au runtime est la mise à disposition générale du profil goroutineleak, qui avait fait son apparition à titre expérimental dans Go 1.26. Le profil goroutineleak dans runtime/pprof est désormais disponible pour tous, ce qui permet la détection automatique des goroutines bloquées de manière permanente.
Ajouts à la bibliothèque standard
Dans cette version, la bibliothèque standard connaît l'un de ses plus importants changements avec l'introduction de encoding/json/v2 et encoding/json/jsontext.
encoding/json/v2 constitue une révision en profondeur du package JSON existant de Go. Il offre un traitement JSON de haut niveau avec des options configurables et des valeurs par défaut plus strictes, parallèlement à encoding/json/jsontext pour le traitement en flux de bas niveau. Le paquet encoding/json existant s'appuie désormais sur l'implémentation v2 pour un démarshalling plus rapide, tout en conservant la rétrocompatibilité.
En ce qui concerne la cryptographie, crypto/mldsa implémente le schéma de signature post-quantique ML-DSA (FIPS 204), intégré à crypto/x509 et crypto/tls.
Go 1.27 introduit également un nouveau package uuid dans la bibliothèque standard qui offre une prise en charge native de la génération et de l'analyse des UUID.
Côté performances, cette version marque les débuts de simd et des modules spécifiques à l'architecture simd/archsimd, qui offrent une prise en charge SIMD expérimentale. Finalement, la pile HTTP bénéficie de plusieurs améliorations : net/http/httptest ajoute désormais NewTestServer, qui fournit un réseau fictif en mémoire adapté à une utilisation avec le paquet testing/synctest.
Source : Annonce de Go 1.27
Et vous ?
Quel est votre avis sur le sujet ?
Que pensez-vous des nouveautés proposées par cette version de Go ? Les trouvez-vous utiles et intéressantes ?
Voir aussi :
La version 1.26 de Go, le langage de programmation développé par Google, est disponible avec des modifications du langage, un nouveau ramasse-miettes, des performances améliorées et bien plus encore
Sortie de la version 1.22 du langage Go, apportant des changements à l'implémentation de la chaîne d'outils, au moteur d'exécution et aux bibliothèques
Le langage Go souffle ses 15 bougies et atteint sa position la plus haute sur l'indice Tiobe, Google annonce que le nombre d'utilisateurs de Go a plus que triplé au cours des cinq dernières années







Quel est votre avis sur le sujet ?
Répondre avec citation
Partager