IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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, et une allocation de mémoire plus rapide

Le , par Anthony

220PARTAGES

5  0 
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
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
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
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
Vous avez lu gratuitement 3 745 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !