Quoi de neuf dans Go 1.24 ?
Go 1.24 s'annonce comme une version significative, introduisant une série d'améliorations axées sur la performance, la sécurité et l'expérience des développeurs. Ces changements visent à rendre Go encore plus puissant et efficace pour la création d'applications modernes.
Amélioration des Performances
Une amélioration générale des performances avec une réduction de 2 à 3 % de la charge CPU sur une suite de benchmarks représentatifs. Ces améliorations incluent une nouvelle implémentation de map intégrée, une allocation mémoire plus efficace des petits objets, et une nouvelle implémentation de mutex interne au runtime. Les résultats peuvent varier selon l'application.
Crypto Post-Quantique
Introduction du package crypto/mlkem
, implémentant ML-KEM-768 et ML-KEM-1024. ML-KEM est un mécanisme d'échange de clés post-quantique anciennement connu sous le nom de Kyber et spécifié dans FIPS 203. Cet ajout prépare Go à l'avenir de la sécurité cryptographique.
Amélioration TLS
Prise en charge de Encrypted Client Hello (ECH) dans TLS. Cette fonctionnalité peut être activée en remplissant le champ Config.EncryptedClientHelloKeys
, améliorant la confidentialité et la sécurité des connexions TLS.
Nouvelle Map Swiss Table
Une implémentation de map améliorée pour de meilleures performances. Cette nouvelle implémentation est basée sur les Swiss Tables et peut être désactivée avec le flag de compilation GOEXPERIMENT=noswissmap
.
Mise à Jour de Sync Map
Performances améliorées pour les modifications de map dans sync.Map
. Les modifications de jeux de clés disjoints sont beaucoup moins susceptibles d'entrer en concurrence sur des maps plus grandes, et il n'y a plus de temps de montée en puissance nécessaire pour atteindre de faibles charges de contention à partir de la map. Si vous rencontrez des problèmes, vous pouvez revenir à l'ancienne implémentation en utilisant GOEXPERIMENT=nosynchashtriemap
.
Marshaling JSON Amélioré
Une nouvelle option de tag omitempty
pour une omission plus intelligente des champs de struct lors du marshaling JSON. Lors du marshaling, un champ de struct avec l'option omitempty
sera omis si sa valeur est nulle. Si le type de champ a une méthode IsZero() bool
, celle-ci sera utilisée pour déterminer si la valeur est nulle.
Nettoyage du Runtime
Introduction de la fonction AddCleanup
pour remplacer SetFinalizer
afin d'améliorer la gestion des ressources. Contrairement à SetFinalizer
, elle ne ressuscite pas l'objet auquel elle est attachée pour la finalisation, et plusieurs nettoyages peuvent être attachés à un seul objet. Le nouveau code devrait préférer AddCleanup
à SetFinalizer
.
Directives d'Outils dans go.mod
Suivi amélioré des dépendances exécutables à l'aide des directives d'outils dans go.mod
. Cela supprime la nécessité de la solution de contournement précédente consistant à ajouter des outils comme des imports vides à un fichier conventionnellement nommé "tools.go".
Accès Limité au Répertoire
Nouveau type os.Root
pour des opérations de système de fichiers contrôlées. Le type os.Root
offre la possibilité d'effectuer des opérations de système de fichiers dans un répertoire spécifique, empêchant l'accès en dehors du chemin spécifié.
Améliorations des Tests
Nouveau package testing/synctest
pour tester le code concurrent. La fonction synctest.Run
démarre un groupe de goroutines dans une "bulle" isolée, et la fonction synctest.Wait
attend que toutes les goroutines de la bulle actuelle se bloquent. Ce package est expérimental et doit être activé en définissant GOEXPERIMENT=synctest
au moment de la compilation.
Cache de Compilation
Les exécutables go run
sont désormais mis en cache pour une exécution plus rapide. Cela rend les exécutions répétées plus rapides au détriment d'un cache plus grand.
Performances de Cgo
Nouvelles annotations #cgo noescape
et #cgo nocallback
pour de meilleures performances Cgo. #cgo noescape cFunctionName
indique au compilateur que la mémoire passée à la fonction C ne s'échappe pas. #cgo nocallback cFunctionName
indique au compilateur que la fonction C n'appelle aucune fonction Go.
Pointeur Faibles
Prise en charge des pointeurs faibles pour référencer la mémoire en toute sécurité sans empêcher la récupération. Les pointeurs faibles sont une primitive de bas niveau fournie pour permettre la création de structures économes en mémoire, telles que les maps faibles pour associer des valeurs, les maps de canonicalisation et divers types de caches.
Amélioration des Benchmarks
Nouvelle méthode testing.B.Loop
pour des benchmarks plus rapides et moins sujets aux erreurs. La fonction de benchmark s'exécutera exactement une fois par -count
, de sorte que les étapes de configuration et de nettoyage coûteuses ne s'exécutent qu'une seule fois. Les paramètres et les résultats des appels de fonction sont maintenus en vie, empêchant le compilateur d'optimiser entièrement le corps de la boucle.
Go 1.24 s'annonce comme une version significative, offrant des améliorations substantielles dans divers aspects du langage et de son écosystème.