Marshall mappe vers XML dans Go : au-delà des structures avec xml.Marshaler
Rencontre avec l'erreur "xml : type non pris en charge : map[string] int" lors d'une tentative de marshalage d'une carte vers des données XML n'est pas rare. Bien que les cartes soient bien marshalées en JSON, comprendre leur comportement avec XML nécessite une analyse plus approfondie.
La principale différence réside dans la nature même de XML. Contrairement à JSON, qui traite les données comme une hiérarchie imbriquée de paires clé-valeur, XML structure les données comme une hiérarchie d'éléments et d'attributs. Cette distinction interdit la conversion directe des cartes.
Pour surmonter ce défi, une implémentation personnalisée est nécessaire. Ici, nous utilisons l'interface xml.Marshaler, qui permet une logique de marshaling sur mesure. En implémentant MarshalXML, nous définissons la manière spécifique dont la carte doit être sérialisée.
Par exemple, nous pouvons créer un type personnalisé appelé StringMap qui intègre la structure de données map[string]string. Dans MarshalXML, nous construisons des jetons XML, comprenant des éléments de début et de fin, pour représenter la carte. Pour chaque paire clé-valeur, nous générons des éléments de début et de fin avec la clé comme nom d'élément et la valeur comme données de caractères.
En implémentant cette méthode MarshalXML, StringMap acquiert la capacité de se marshaler au format XML. Désormais, le regroupement des cartes devient simple, impliquant uniquement un appel à xml.MarshalIndent. Cette approche personnalisée fournit une solution viable au-delà du recours uniquement aux structures pour le marshaling XML.
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!