Packages JSON expérimentaux de Go 1.25 : amélioration des performances et syntaxe plus stricte

2025-09-10

Go 1.25 introduit les packages expérimentaux `encoding/json/v2` et `encoding/json/jsontext` pour améliorer les capacités de codage et de décodage JSON de Go. Ceux-ci corrigent les lacunes du package `encoding/json` existant, telles que la gestion imprécise de la syntaxe JSON, les goulots d'étranglement des performances et les lacunes de l'API. Les améliorations incluent une gestion plus stricte des UTF-8 invalides, des clés dupliquées et des slices/maps nuls. Le traitement en streaming améliore considérablement les performances, en particulier la désérialisation. Bien qu'il soit largement rétrocompatible, les développeurs sont encouragés à tester avec `GOEXPERIMENT=jsonv2` et à fournir des commentaires.

Lire plus
(go.dev)
Développement

Module cryptographique Go FIPS 140-3 natif : une solution simple et sécurisée

2025-07-16

Go 1.24 et les versions ultérieures prennent désormais en charge nativement la conformité FIPS 140-3 grâce à un nouveau module cryptographique développé en collaboration avec Geomys. Ce module, validé par le certificat CAVP A6650 et en cours d'examen CMVP, élimine les précédents points de friction pour les utilisateurs de Go dans les environnements réglementés. Il offre une expérience utilisateur transparente, avec une sécurité sans compromis, utilisant un ECDSA optimisé et un NIST DRBG basé sur AES-256-CTR. Il prend en charge un large éventail de plates-formes et d'algorithmes, surpassant les capacités et la sécurité de son prédécesseur, Go+BoringCrypto. Ce module natif offre le moyen le plus simple et le plus sûr d'assurer la conformité FIPS 140-3 pour les développeurs Go.

Lire plus
(go.dev)
Développement Module cryptographique

Interfaces Génériques en Go : Utilisation astucieuse des interfaces génériques pour des structures d'arborescence efficaces et adaptatives

2025-07-10

Cet article explore l'utilisation avancée des interfaces génériques en Go, notamment comment gérer élégamment les contraintes de type lors de la construction de structures de données telles que les arbres de recherche binaires en utilisant des interfaces génériques auto-référentielles. Prenant une structure d'arbre comme exemple, il compare trois approches d'implémentation : l'utilisation de `cmp.Ordered`, une fonction de comparaison personnalisée et une interface générique auto-référentielle. Enfin, l'article approfondit la combinaison de contraintes `comparable` pour construire des ensembles ordonnés et éviter les complexités liées aux récepteurs de pointeur, en recommandant de privilégier la simplicité et la lisibilité dans la conception.

Lire plus
(go.dev)
Développement Génériques Go

La saga de la gestion des erreurs en Go : La fin d'une guerre syntaxique

2025-06-03

Après des années de tentatives pour améliorer la gestion verbeuse des erreurs en Go, l'équipe Go a décidé d'abandonner les efforts visant à modifier la syntaxe du langage. Des propositions comme "check/handle", "try" et l'opérateur "?" n'ont pas réussi à obtenir un consensus généralisé. L'article détaille cette histoire, expliquant la décision en raison du manque de consensus, des coûts d'implémentation élevés et de la suffisance des approches existantes. L'équipe soutient qu'il est plus productif de se concentrer sur de meilleurs mécanismes et outils de gestion des erreurs que de rechercher du sucre syntaxique, en mettant l'accent sur l'aspect pratique et la lisibilité plutôt que sur la brièveté du code.

Lire plus
(go.dev)
Développement conception du langage

Go 1.25 supprime les types core, simplifiant la spécification du langage

2025-03-26

Go 1.18 a introduit les génériques et, avec eux, le concept de "types core" pour simplifier la gestion des opérandes génériques. Cependant, cela a ajouté de la complexité à la spécification du langage et limité la flexibilité de certaines opérations. Go 1.25 supprime les types core, les remplaçant par des règles plus claires et concises, simplifiant ainsi la spécification du langage et ouvrant la voie à de futures améliorations du langage, telles que des opérations de slice plus puissantes et une inférence de type améliorée. Cette modification n'affecte pas le comportement des programmes Go existants.

Lire plus
(go.dev)
Développement Spécification du langage

Go 1.24 améliore les capacités de Wasm : réacteurs WASI et fonctions exportées

2025-02-14

Go 1.24 améliore considérablement la prise en charge de WebAssembly (Wasm) avec l'introduction de la directive `go:wasmexport` et la possibilité de créer des réacteurs WASI. Cela permet aux développeurs Go d'exporter des fonctions vers Wasm, permettant une intégration transparente avec les applications hôtes. Le nouveau mode de réacteur WASI facilite l'exécution continue de modules Wasm capables de réagir à plusieurs événements ou demandes sans réinitialisation. Bien qu'il existe des limitations, telles que la nature monothreadée de Wasm et les restrictions de type, les améliorations de Go 1.24 ouvrent la voie à des applications Wasm basées sur Go plus puissantes et polyvalentes.

Lire plus
(go.dev)
Développement

La nouvelle API opaque de Go Protobuf améliore les performances et la sécurité

2024-12-16

L'équipe Go a publié une nouvelle API opaque pour Go Protobuf, coexistant avec l'API Open Struct existante. Cette nouvelle API découple le code généré de sa représentation mémoire sous-jacente, améliorant ainsi les performances, réduisant les allocations mémoire et permettant des optimisations telles que le décodage paresseux. En masquant les champs de la structure et en y accédant uniquement via des méthodes d'accès, elle prévient les bogues liés aux pointeurs et le partage accidentel. La migration implique d'activer l'API hybride, d'utiliser l'outil `open2opaque` puis de basculer vers l'API opaque. L'API Open Struct existante reste prise en charge.

Lire plus
(go.dev)
Développement