json/v2 is fixing many of Go's JSON quirks

Dreams of Code
26 Aug 202517:35

Summary

TLDRLa nouvelle version de Go 1.25 apporte des améliorations notables, notamment des gains de performance, un nouveau collecteur de déchets expérimental, et un package JSON/V2 optimisé. Ce dernier simplifie la gestion des slices et des maps nil, et introduit des options de formatage avancées pour la sérialisation JSON. Parmi les fonctionnalités les plus intéressantes, on retrouve la possibilité de définir des marshalseurs personnalisés via une nouvelle fonction, rendant le processus plus flexible. Cette version, bien qu'encore expérimentale, promet de faciliter la vie des développeurs Go, notamment pour les APIs backend.

Takeaways

  • 🚀 Go 1.25 introduit un nouveau package expérimental JSON/V2, apportant d'importantes améliorations de performance et de nouvelles fonctionnalités de sérialisation.
  • ⚙️ Les slices et maps nil sont désormais rendues comme des tableaux ou objets vides au lieu de 'null', simplifiant la gestion des valeurs par défaut lors du marshalling JSON.
  • 🔄 Il est possible de rétablir l’ancien comportement de rendu des nils comme 'null' grâce à de nouvelles options passées à la fonction JSON.Marshal.
  • 🧩 Le package JSON/V2 ajoute plusieurs nouvelles options de marshalling permettant un contrôle précis du formatage sans passer par les tags de struct.
  • ✨ La nouvelle fonction 'MarshalFunc' permet de créer des sérialiseurs personnalisés en ligne, sans devoir implémenter une interface séparée, rendant le code plus modulaire.
  • 💡 Ces sérialiseurs personnalisés peuvent être combinés via 'JoinMarshal', facilitant la réutilisation à grande échelle dans un projet Go.
  • 🔁 De la même manière, 'UnmarshalFunc' permet de définir des désérialiseurs personnalisés pour transformer facilement des chaînes en types Go.
  • 🧠 Le nouveau tag 'format' permet de spécifier la manière dont certains types sont convertis en JSON, notamment les tableaux d’octets, les durées et les dates.
  • 📄 Deux nouvelles fonctions — 'MarshalWrite' et 'UnmarshalRead' — remplacent avantageusement les anciens encodeurs/décodeurs, simplifiant le traitement des flux IO.
  • ⏱️ Le package 'JSON text' conserve les anciennes méthodes d’encodage/décodage pour un contrôle plus bas-niveau, notamment pour les flux de données complexes.
  • 💬 L’auteur estime que ces changements rendent Go plus cohérent et agréable pour le développement d’APIs backend, et se dit particulièrement enthousiaste pour la version 1.26.
  • 🎓 Le sponsor Boot.dev est mis en avant comme une plateforme ludique et complète pour apprendre Go ou TypeScript avec des fonctionnalités interactives et des réductions promotionnelles.

Q & A

  • Quels sont les principaux changements apportés par Go 1.25, notamment en matière de performance ?

    -Go 1.25 apporte plusieurs améliorations de performance, notamment un nouveau collecteur de déchets expérimental, des tranches plus rapides, et une amélioration du déchiffrement JSON grâce au nouveau package expérimental JSON/V2.

  • Pourquoi la gestion des tranches nil (null) en Go a été un problème pour de nombreux développeurs ?

    -Les tranches nil sont courantes en Go, car nil est la valeur zéro d'une tranche. Cependant, lors de la sérialisation JSON, ces tranches étaient précédemment rendues comme null, ce qui pouvait être source de confusion et nécessitait des solutions compliquées comme la réflexion ou des types personnalisés.

  • Comment le nouveau package JSON/V2 améliore-t-il le rendu des tranches nil et des cartes nil ?

    -Le package JSON/V2 rend désormais les tranches nil comme des tableaux vides et les cartes nil comme des objets vides, ce qui simplifie le rendu JSON sans avoir besoin d'instancier manuellement des objets vides.

  • Quelles nouvelles options sont disponibles avec la fonction JSON.Marshal dans Go 1.25 ?

    -La fonction JSON.Marshal dans Go 1.25 prend maintenant en charge des options supplémentaires comme 'format nil slice as null' et 'format nil maps as null', permettant de personnaliser le comportement de sérialisation pour les tranches et cartes nil.

  • Que permet la nouvelle fonction 'Marshal funk' dans le package JSON/V2 ?

    -La fonction 'Marshal funk' permet de créer des marshallers JSON personnalisés en ligne sans avoir à implémenter l'interface JSON.Marshall sur un type personnalisé. Cela facilite la personnalisation du rendu de types comme les booléens et les entiers.

  • Comment la fonction 'with Marshal' améliore-t-elle l'utilisation des marshallers personnalisés ?

    -'With Marshal' permet de passer un marshaller personnalisé à la fonction JSON.Marshal, rendant ainsi plus simple l'application de transformations spécifiques sur les données JSON, comme convertir un booléen en emoji.

  • Qu'est-ce que le 'format tag' dans le package JSON/V2 et comment l'utilise-t-on ?

    -Le 'format tag' est un nouvel ajout dans JSON/V2 qui permet de contrôler le formatage des types comme les tableaux d'octets et les durées. Par exemple, pour les durées, il peut les formater en secondes ou nanosecondes, et pour les tableaux d'octets, il permet de choisir entre base64, hexadécimal ou tableau d'entiers.

  • Quels types de données peuvent maintenant être formatés de manière personnalisée grâce au nouveau package JSON/V2 ?

    -Le package JSON/V2 permet de formater les tableaux d'octets, les durées, et les types de temps. Par exemple, les durées peuvent être formatées en ISO8601 ou en secondes, et les types de temps peuvent être rendus comme des dates ou des heures uniquement.

  • Quels sont les avantages de la nouvelle fonction 'marshall write' dans le package JSON/V2 ?

    -La fonction 'marshall write' remplace l'ancienne méthode d'encodeur pour écrire directement dans un IO. Cela simplifie le processus d'encodage de JSON dans un flux sans nécessiter de type intermédiaire comme l'encodeur JSON, ce qui améliore l'efficacité.

  • Quelles différences y a-t-il entre 'marshall write' et l'encodeur traditionnel de JSON ?

    -La fonction 'marshall write' n'ajoute pas de nouvelle ligne après l'écriture des données JSON, contrairement à l'encodeur JSON. De plus, 'marshall write' permet d'écrire directement dans un flux IO, ce qui évite l'utilisation de types intermédiaires.

Outlines

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Mindmap

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Keywords

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Highlights

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф

Transcripts

plate

Этот раздел доступен только подписчикам платных тарифов. Пожалуйста, перейдите на платный тариф для доступа.

Перейти на платный тариф
Rate This

5.0 / 5 (0 votes)

Связанные теги
GoLangJSON V2DéveloppementBackendPerformanceProgrammationTutorielWeb APIInnovationCode GoApprentissageTechnologie
Вам нужно краткое изложение на английском?