Maison > développement back-end > Golang > le corps du texte

Comment puis-je désorganiser en toute sécurité JSON avec des types génériques dans Go 1.18 ?

Patricia Arquette
Libérer: 2024-11-01 12:35:02
original
772 Les gens l'ont consulté

How Can I Safely Unmarshal JSON with Generic Types in Go 1.18?

Utilisation générique dans Unmarshal (Go 1.18)

Lors de l'utilisation de génériques dans Go 1.18, comme la création d'un conteneur pour contenir différents types de rapports, des contraintes de type peuvent survenir. Considérez la configuration suivante :

  • Plusieurs types de rapports représentés par des structures
  • Un wrapper ReportContainer avec un paramètre de type générique Reportable, contraint d'implémenter l'interface Reportable
  • Un discriminateur ReportType pour déterminer le type de rapport concret lors du démarshalling

Vous pouvez rencontrer des problèmes avec les contraintes de type sur les types de retour, conduisant à une « sémantique de texte libre » dans la fonction GetBody() pour prendre en charge l'assertion de type.

Défis et solutions

Le problème vient du fait que Go ne prend pas en charge les assertions de type pour les structures et n'autorise pas les pointeurs vers des types génériques. Pour résoudre ce problème, vous pouvez créer une interface qui implémente des getters pour LocationID, Provider, ReportType et Body. Cependant, cette solution nécessite de sacrifier la sécurité des types.

Une approche plus sûre consiste à renoncer au polymorphisme paramétrique et à utiliser une instruction switch concrète basée sur la valeur du discriminateur lors du déclassement JSON. Cela garantit que le type concret correct est utilisé pour chaque type de rapport.

Approche alternative

Pour l'analyse JSON dynamique, vous pouvez utiliser une fonction générique de démarchage :

<code class="go">func unmarshalAny[T any](bytes []byte) (*T, error) {
    out := new(T)
    if err := json.Unmarshal(bytes, out); err != nil {
        return nil, err
    }
    return out, nil
}</code>
Copier après la connexion

Bien que cette fonction offre de la flexibilité, il est essentiel de noter que si son implémentation est minimale, elle effectue simplement les mêmes actions que l'intégration directe de la logique de désorganisation. Ainsi, l'utilisation de cette fonction n'est justifiée que si elle introduit une logique supplémentaire.

En résumé, considérez attentivement la nécessité des génériques lorsque vous travaillez avec des types concrets et la désorganisation JSON. Optez pour une solution basée sur un commutateur lorsque cela est nécessaire sans compromettre la sécurité du type et faites preuve de prudence lorsque vous utilisez des fonctions génériques qui dupliquent inutilement des fonctionnalité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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!