


Comment désorganiser en toute sécurité JSON dans une interface {} et gérer l'assertion de type ?
Désagrégation dans une interface{} et exécution d'une assertion de type
Désorganisation de JSON dans une interface{} permet de gérer une gamme diversifiée de types de données. Cependant, affirmer directement le type de l'interface non marshalée{} pose des défis.
Dans le scénario donné, l'interface{} n'est pas marshalée à partir d'un message reçu. Tenter d'effectuer un changement de type sur cette interface{} comme le montre l'extrait de code produit des résultats inattendus, le type étant déclaré comme map[string]interface{}.
Pour résoudre ce problème, il est important de comprendre les types par défaut dans lesquels le package JSON est désorganisé, comme indiqué dans son documentation :
- bool
- float64
- string
- []interface{}
- map[string]interface{}
- néant
Puisque le démarshaling est effectué dans une interface{}, le type résultant sera limité à cet ensemble. Par conséquent, le package ne connaît pas les structures personnalisées telles que Something1 et Something2.
Options de solution :
1. Démarshaling direct :
Pour éviter la gestion de l'interface intermédiaire{}, les données JSON peuvent être directement démarshalées dans le type de structure souhaité. Par exemple :
var job Something1 json.Unmarshal([]byte(msg), &job)
2. Convertir à partir de l'interface générique :
Si travailler avec une interface générique{} est nécessaire, les données peuvent être décompressées manuellement à partir de la map[string]interface{}. Voici un exemple :
var input interface{} json.Unmarshal([]byte(msg), &input) if smth1, ok := input.(map[string]interface{}); ok { job := Something1{ Thing: smth1["thing"].(string), OtherThing: smth1["other_thing"].(int64), } }
3. Wrapper Struct :
Dans les cas où la gestion de différents types de données est courante, une structure wrapper avec une méthode UnmarshalJSON personnalisée peut simplifier le processus. Cette méthode peut tenter de regrouper les données dans différentes structures et définir le champ Données en conséquence.
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!

Go utilise le package "Encoding / Binary" pour le codage et le décodage binaires. 1) Ce package fournit des fonctions Binary.Write et Binary.read pour les données d'écriture et de lecture. 2) Faites attention au choix du bon endian (comme Bigendian ou Littleendian). 3) L'alignement des données et la gestion des erreurs sont également essentiels pour garantir l'exactitude et les performances des données.

Les "octets" packageofferser efficace pour la manière

Theencoding/binarypackageinGoiseffectiveforoptimizingbinaryoperationsduetoitssupportforendiannessandefficientdatahandling.Toenhanceperformance:1)Usebinary.NativeEndianfornativeendiannesstoavoidbyteswapping.2)BatchReadandWriteoperationstoreduceI/Oover

Le package des octets GO est principalement utilisé pour traiter efficacement les tranches d'octets. 1) Utilisation de Bytes.Buffer peut effectuer efficacement l'épissage de chaîne pour éviter une allocation de mémoire inutile. 2) Les octets. La fonction égale est utilisée pour comparer rapidement les tranches d'octets. 3) Les fonctions Bytes.Index, Bytes.Split et Bytes.ReplaceALL peuvent être utilisées pour rechercher et manipuler des tranches d'octets, mais les problèmes de performances doivent être prêts à l'attention.

Le package d'octets offre une variété de fonctions pour traiter efficacement les tranches d'octets. 1) Utilisez les octets.Contient pour vérifier la séquence d'octets. 2) Utilisez des octets.split pour diviser les tranches d'octets. 3) Remplacez les octets de séquence d'octets. Replace. 4) Utilisez des bytes.join pour connecter plusieurs tranches d'octets. 5) Utilisez des bytes.buffer pour créer des données. 6) Bytes combinés. MAP pour le traitement des erreurs et la vérification des données.

Le package d'encodage / binaire de Go est un outil pour le traitement des données binaires. 1) Il prend en charge l'ordre des octets endian des petits et grandes enlans et peut être utilisé dans les protocoles de réseau et les formats de fichiers. 2) Le codage et le décodage des structures complexes peuvent être gérés via des fonctions de lecture et d'écriture. 3) Faites attention à la cohérence de l'ordre des octets et du type de données lors de l'utilisation, en particulier lorsque les données sont transmises entre différents systèmes. Ce package convient au traitement efficace des données binaires, mais nécessite une gestion minutieuse des tranches et des longueurs d'octets.

Les "octets" emballent la manière

Go'sstringspackageincludessentialfunctionslikecontains, trimspace, fen spin, andReplaceALL.1) contiennent une visualisation de coche


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

SublimeText3 Linux nouvelle version
Dernière version de SublimeText3 Linux

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft
