- La version Go 1.22 sort six mois après Go 1.21.
- La plupart des changements concernent l’implémentation de la toolchain, du runtime et des bibliothèques.
- La promesse de compatibilité Go 1 est maintenue, et presque tous les programmes Go devraient continuer à se compiler et à s’exécuter comme auparavant.
Changements du langage
- Deux changements concernent les boucles "for".
- Auparavant, les variables déclarées par une boucle "for" étaient créées une seule fois puis mises à jour à chaque itération, mais dans Go 1.22, chaque itération de la boucle crée désormais une nouvelle variable, ce qui évite les bugs de partage involontaire.
- Les boucles "for" peuvent désormais itérer sur des entiers avec
range.
Outils
Commande Go
- Il est possible de gérer les dépendances dans un workspace en utilisant le répertoire
vendor.
go get n’est plus pris en charge dans l’ancien mode GOPATH, hors modules.
go mod init n’essaie plus d’importer les dépendances du module à partir des fichiers de configuration d’autres outils de vendoring.
go test -cover affiche désormais un résumé de couverture pour les packages qui n’ont pas leurs propres fichiers de test.
Trace
- L’interface web de l’outil
trace a été partiellement repensée pour prendre en charge le nouveau traceur.
Vet
- Le comportement de l’outil
vet concernant les variables de boucle a changé.
- Un nouvel avertissement a été ajouté pour les appels à
append qui n’ajoutent aucune valeur.
- Un nouvel avertissement a été ajouté pour les problèmes pouvant survenir lors de l’utilisation de
time.Since dans une instruction defer.
- Un nouvel avertissement a été ajouté lorsque les paires clé-valeur ne correspondent pas dans les appels à
log/slog.
Runtime
- Les métadonnées du ramasse-miettes basées sur les types sont conservées plus près des objets du tas, ce qui améliore les performances CPU de 1 à 3 %.
Compilateur
- Les builds avec optimisation guidée par profil (PGO) peuvent désormais dévirtualiser davantage d’appels qu’auparavant.
Éditeur de liens
- Les flags
-s et -w de l’éditeur de liens ont été modifiés pour se comporter de manière plus cohérente sur toutes les plateformes.
Bootstrap
- Go 1.22 exige désormais, pour le bootstrap, la dernière point release de Go 1.20 ou une version ultérieure.
Bibliothèque standard
Nouveau package math/rand/v2
math/rand/v2 est le premier package “v2” de la bibliothèque standard, avec plusieurs changements importants par rapport à math/rand.
Nouveau package go/version
- Un nouveau package
go/version a été ajouté pour implémenter des fonctions de validation et de comparaison des chaînes de version de Go.
Patterns de routage améliorés
- Le routage HTTP de la bibliothèque standard devient plus expressif.
Changements mineurs dans les bibliothèques
- Divers changements mineurs et améliorations de performances ont été apportés à plusieurs bibliothèques.
Ports
Darwin
- Sur macOS, pour l’architecture x86 64 bits (
darwin/amd64), la toolchain Go génère désormais par défaut des exécutables indépendants de la position (PIE).
Arm
- Il est possible de choisir entre virgule flottante logicielle et matérielle via la variable d’environnement
GOARM.
Loong64
- Le port
loong64 transmet désormais les arguments et les résultats des fonctions via des registres.
OpenBSD
- Un port expérimental pour PowerPC 64 bits big-endian (
openbsd/ppc64) a été ajouté sur OpenBSD.
Avis de GN⁺
- Cette sortie de Go 1.22 se distingue notamment par les changements apportés aux boucles "for" et l’introduction du nouveau package
math/rand/v2. Ces évolutions apportent de meilleures performances et une plus grande stabilité aux développeurs Go, tout en reflétant l’évolution du langage.
- Le package
math/rand/v2 offre de meilleures capacités de génération aléatoire grâce à des algorithmes plus rapides et une nouvelle API, ce qui constitue une amélioration importante pour la cryptographie et les autres applications dépendantes du hasard.
- Go 1.22 devrait avoir un impact positif sur la communauté Go en proposant diverses optimisations et nouvelles fonctionnalités qui améliorent à la fois les performances et l’expérience développeur, tout en maintenant la compatibilité.
1 commentaires
Avis Hacker News
io.Copypeut désormais utiliser l’appel système Linuxsplice(2)lors d’une copie de TCPConn vers UnixConn. Cette personne apprécie beaucoup les bénéfices que ce type de motif apporte dans le packageio.httpmuxgo121.sql.Null[T]est bien accueilli. Jusqu’ici, cette personne utilisaitnulldesqlboiler, qui propose une API similaire àsql.Null, avec en plus une méthodeIsSet() boolindiquant si la valeur a été explicitement définie.chi.any.