Outils développeurActualité

Go 1.27 et JSON : conserver l’API ou passer à v2 ?

Sur cette page
  1. Mise à jour du compilateur et migration d’API diffèrent
  2. Construire une petite matrice de contrat
  3. Évaluer la maintenance et la charge réelle

Go 1.27 remplace le moteur d’encoding/json en préservant le comportement de son API. Importer encoding/json/v2 constitue un choix distinct, avec d’autres valeurs par défaut. Go 1.27.1 est disponible et corrige notamment JSON.

Go 1.27 conserve l’API de compatibilité encoding/json sur le moteur v2. L’import explicite encoding/json/v2 choisit des défauts plus stricts, dont le rejet des noms dupliqués. Moteur et contrat d’entrée se distinguent.
Go 1.27 conserve l’API de compatibilité encoding/json sur le moteur v2. L’import explicite encoding/json/v2 choisit des défauts plus stricts, dont le rejet des noms dupliqués. Moteur et contrat d’entrée se distinguent. Graphique : PeopleAreGeek. Source des données.
Agrandir l’image

Mise à jour du compilateur et migration d’API diffèrent

L’annonce du 19 août présente méthodes génériques, nouveaux paquets JSON et améliorations du runtime. Les notes de version précisent que l’API encoding/json reste supportée, désormais implémentée avec le moteur v2. La sémantique d’encodage et de décodage est conservée, mais le texte exact des erreurs peut changer.

L’import explicite encoding/json/v2 adopte des valeurs par défaut plus strictes : noms d’objet dupliqués et UTF-8 invalide sont notamment rejetés. La documentation du paquet décrit les options configurables. Changer l’import modifie donc un contrat à examiner ; ce n’est pas obligatoire pour utiliser Go 1.27.

Le paquet distinct encoding/json/jsontext gère le traitement syntaxique en flux. Il répond au besoin de manipuler des jetons ou valeurs JSON ; son existence n’impose pas de réécrire un décodeur applicatif ordinaire.

Construire une petite matrice de contrat

Une fiche de migration originale peut partir de quatre entrées : objet normal, noms dupliqués, champ inconnu et JSON mal formé. Pour chacune, relevez statut HTTP ou erreur applicative, valeur acceptée et options exactes du décodeur.

Exemple : un objet contient deux fois la clé « mode », avec les valeurs « safe » et « fast ». Le contrat destinataire accepte-t-il cette ambiguïté ou la rejette-t-il ? Par défaut, v2 rejette les noms dupliqués. Un autre décodeur qui réussit ne démontre pas que tous les destinataires choisiront la même valeur.

Gardez l’objet normal comme témoin et l’entrée mal formée comme cas de rejet. Testez séparément catégorie d’erreur et message humain, afin qu’une ponctuation modifiée ne sélectionne pas une autre branche applicative. Ce jeu de cas est proposé à partir des contrats documentés ; PeopleAreGeek ne prétend pas l’avoir exécuté avec Go.

Évaluer la maintenance et la charge réelle

L’historique des versions indique Go 1.27.1 au 1er septembre, avec des corrections touchant notamment encoding/json, compilateur et runtime. C’est la maintenance pertinente pour évaluer aujourd’hui la branche 1.27. L’option temporaire nojsonv2 à la compilation rétablit l’ancienne implémentation pour diagnostiquer une incompatibilité ; ce n’est pas une stratégie permanente.

Les méthodes génériques peuvent déclarer leurs propres paramètres de type, mais les méthodes d’interface ne le peuvent pas. Cette limite compte dans la conception d’une API publique.

Le gain d’allocation annoncé, jusqu’à 30 %, concerne les petits objets ; environ 1 % est attendu sur les programmes riches en allocations. Cela ne prouve pas une baisse de 1 % de toute facture de service. Comparez débit, latence, mémoire et taille binaire sur une charge identique avant de chiffrer l’économie.

Revue du 8 septembre : annonces et documents techniques vérifiés, évolutions ajoutées et illustration explicative reprise.