Go 1.22 est sorti : ce qui a changé dans le langage
L'équipe de développement de Go a présenté la version tant attendue 1.22. Cette mise à jour apporte un certain nombre de changements significatifs visant à améliorer les performances, la sécurité et la facilité de développement. Examinons les innovations les plus importantes.
Principales nouveautés de la version 1.22
1. Boucles for-range améliorées
L'un des changements les plus attendus est la refonte du comportement des variables dans les boucles for-range. Auparavant, une variable déclarée dans l'en-tête de la boucle était créée une fois et réutilisée à chaque itération. Cela entraînait des bugs difficiles à détecter, notamment lors de la capture de la variable dans des fermetures (par exemple, lors du passage à des goroutines).
À partir de Go 1.22, chaque itération de la boucle for-range crée sa propre nouvelle variable. Cela rend le code plus prévisible et plus sûr.
- Ancien comportement : une variable pour toute la boucle, erreurs fréquentes avec les pointeurs et les goroutines.
- Nouveau comportement : chaque itération reçoit sa propre copie de la variable, ce qui élimine les bugs courants.
Ce changement concerne aussi bien les boucles sur les slices, les maps et les canaux que les boucles for traditionnelles à trois composants.
2. Prise en charge de l'integer range dans for-range
Go 1.22 introduit la possibilité d'itérer directement sur une plage entière. Vous pouvez désormais écrire simplement for i := range 10 au lieu de constructions lourdes avec for i:=0; i < 10; i++.
Cette simplification syntaxique rend le code plus propre et réduit le risque d'erreurs "off-by-one".
// Avant :for i := 0; i < 5; i++ { ... }
// Après :for i := range 5 { ... }3. Nouvelle implémentation du package math/rand/v2
Le package math/rand a reçu une deuxième version — math/rand/v2. Il ne s'agit pas simplement d'une mise à jour, mais d'une refonte complète axée sur la vitesse et la qualité de la génération de nombres aléatoires.
- Performances : La génération de nombres est devenue nettement plus rapide (dans certains benchmarks, jusqu'à 2 à 3 fois).
- Algorithmes : Des algorithmes modernes et plus fiables sont utilisés (par exemple, ChaCha8 pour le générateur par défaut).
- Facilité d'utilisation : La nouvelle API simplifie le travail avec les générateurs, et un certain nombre de fonctions obsolètes ont été supprimées.
L'ancien package math/rand est toujours disponible pour la rétrocompatibilité, mais pour les nouveaux projets, il est recommandé d'utiliser math/rand/v2.
Autres améliorations importantes
- Routage amélioré dans net/http : Le package
net/httpprend désormais en charge une nouvelle façon d'enregistrer les gestionnaires à l'aide de motifs, proche du style des frameworks standards. Les développeurs peuvent définir des routes plus flexibles, incluant des substitutions et des méthodes HTTP. - Optimisation du ramasse-miettes : Le ramasse-miettes est devenu plus efficace, ce qui a entraîné une réduction des latences et une diminution de la consommation mémoire de pointe dans certains scénarios.
- Mise à jour de la bibliothèque standard : Des modifications mineures mais utiles ont été apportées au travail avec les slices, les maps et les chaînes de caractères, améliorant les performances et la stabilité.
- Améliorations des outils