Maison > développement back-end > Golang > Comment puis-je implémenter un démarshaling JSON personnalisé pour les types scalaires dérivés dans Go ?

Comment puis-je implémenter un démarshaling JSON personnalisé pour les types scalaires dérivés dans Go ?

Patricia Arquette
Libérer: 2024-11-25 05:46:18
original
406 Les gens l'ont consulté

How Can I Implement Custom JSON Unmarshaling for Derived Scalar Types in Go?

Dérivation de types personnalisés pour le démarshaling JSON dans Go

Lorsque vous travaillez avec des types personnalisés dans Go, il est souvent nécessaire d'implémenter la fonction UnmarshalJSON pour activer conversion automatique de JSON vers le type souhaité. Cependant, des défis surviennent lorsque le type est dérivé d’une valeur scalaire. Cet article explore une solution pour surmonter ce problème.

Prenons l'exemple d'un type PersonID qui représente des constantes entières sous-typées pour identifier les individus. Nous souhaitons étendre les fonctionnalités de ce type pour prendre en charge la conversion automatique à partir de chaînes JSON. L'implémentation d'UnmarshalJSON pour ce type devient difficile car il est destiné à renvoyer ou modifier directement une valeur scalaire, alors qu'UnmarshalJSON attend une structure pour sa modification.

Pour résoudre ce problème, nous adoptons une approche de récepteur de pointeur. En utilisant un récepteur de pointeur, les modifications apportées dans la méthode UnmarshalJSON sont reflétées sur la valeur d'origine. Voici un exemple de l'implémentation modifiée d'UnmarshalJSON :

func (intValue *PersonID) UnmarshalJSON(data []byte) error {
  var s string
  if err := json.Unmarshal(data, &s); err != nil {
    return err
  }
  *intValue = Lookup(s)
  return nil
}
Copier après la connexion

Dans cette implémentation, le texte JSON n'est pas marshalé en une variable de chaîne avant d'être transmis à la fonction Lookup, qui convertit la chaîne en la valeur PersonID souhaitée. Cette valeur est ensuite attribuée au pointeur intValue.

De plus, pour éviter les conflits entre les balises JSON et les données JSON, assurez-vous que les balises de la structure MyType correspondent aux noms de champs dans le JSON. En suivant ces étapes, vous pouvez implémenter avec succès UnmarshalJSON pour les types scalaires dérivés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal