Maison développement back-end Golang tableau golang en XML

tableau golang en XML

May 10, 2023 am 09:48 AM

Avec la popularité croissante de Golang dans le domaine du développement Web et du cloud computing, le traitement XML de Golang a progressivement retenu l'attention. Dans les projets réels, nous devons souvent transmettre et stocker des données au format XML, et nous devons également analyser les données XML et les convertir en un tableau Go. Par conséquent, cet article expliquera comment convertir des tableaux go au format XML et les utiliser dans le développement réel.

1. Le package XML de Golang

Le package XML de Golang est le package de base pour le traitement du XML. Il fournit l'analyse de la structure de données XML et la fonction de sérialisation de la structure de données Go à XML. Le package XML de Golang prend en charge l'encodage et le décodage de divers types tels que les structures, les nombres et les chaînes. Parmi les fonctions fournies par ce package, les fonctions Marshal et Unmarshal sont les deux fonctions les plus couramment utilisées, qui sont respectivement utilisées pour sérialiser et analyser les données XML.

2. Convertir un tableau en XML

Bien que le package XML de Golang prenne en charge l'encodage et le décodage de différents types, il ne fournit pas d'interfaces correspondantes pour la sérialisation et la désérialisation des tableaux. Par conséquent, lors de l’encodage et du décodage des tableaux XML, nous devons définir nous-mêmes la méthode de conversion.

  1. Array to XML

Notre idée pour convertir un tableau au format XML est la suivante : convertissez d'abord le tableau en structure, puis convertissez la structure en XML. Ensuite, nous définissons d'abord un type personnalisé Utilisateur, qui comporte trois champs : identifiant, nom et âge.

type User struct {
    Id   string `xml:"id"`
    Name string `xml:"name"`
    Age  int    `xml:"age"`
}

Définissez ensuite un type de données Users, qui comporte également 3 champs, à savoir XMLName, Version et user array Items.

type Users struct {
    XMLName xml.Name `xml:"users"`
    Version string   `xml:"version,attr"`
    Items   []User   `xml:"user"`
}

Ensuite, nous définissons une fonction pour convertir le tableau au format XML. L'idée de base de cette fonction est de créer une instance du type Users, de convertir chaque élément du tableau en type User et de l'ajouter au tableau Items des Users. Enfin, utilisez la fonction xml.Marshal pour convertir le. Instance des utilisateurs en octets au format XML.

func ArrayToXml(arr []interface{}) ([]byte, error) {
    var users Users
    users.Version = "1.0"
    for i := 0; i < len(arr); i++ {
        var user User
        if v, ok := arr[i].(map[string]interface{}); ok {
            user.Id = v["id"].(string)
            user.Name = v["name"].(string)
            user.Age = v["age"].(int)
            users.Items = append(users.Items, user)
        }
    }
    return xml.Marshal(users)
}

Dans le code ci-dessus, la variable arr fait référence à un tableau de n'importe quel type, et chaque élément de celui-ci est de type map[string]interface{}. Les assertions de type sont utilisées ici pour forcer les variables du type map[string]interface{} dans le type correspondant afin de réaliser l'analyse des éléments du tableau.

  1. Xml en tableau

Tout comme la conversion d'un tableau en XML, l'idée de la conversion de XML en tableau est la suivante : convertissez d'abord le XML en une structure, puis convertissez la structure en un tableau du type correspondant.

La fonction Unmarshal est fournie dans le package XML de Golang, qui peut convertir un tableau d'octets au format XML en une structure. Le code suivant montre comment convertir un tableau d'octets au format XML en une instance Users :

func XmlToArray(data []byte) ([]interface{}, error) {
    var users Users
    var arr []interface{}
    err := xml.Unmarshal(data, &users)
    if err != nil {
        return nil, err
    }
    for _, item := range users.Items {
        m := make(map[string]interface{})
        m["id"] = item.Id
        m["name"] = item.Name
        m["age"] = item.Age
        arr = append(arr, m)
    }
    return arr, nil
}

Dans le code ci-dessus, nous convertissons l'instance de type Users analysée à partir de XML en un type tableau. Une boucle for est utilisée ici pour convertir chaque instance de type User dans l'instance Users en type map[string]interface{} et l'ajouter au tableau.

3. Test

Nous avons implémenté avec succès les opérations de base de conversion de tableaux au format XML et de conversion du format XML en tableaux :

func main() {
    arr := make([]interface{}, 0)
    m1 := map[string]interface{}{
        "id":   "1",
        "name": "Tom",
        "age":  20,
    }
    m2 := map[string]interface{}{
        "id":   "2",
        "name": "Jerry",
        "age":  22,
    }
    arr = append(arr, m1)
    arr = append(arr, m2)

    data, err1 := ArrayToXml(arr)
    if err1 != nil {
        fmt.Println("error:", err1)
        return
    }
    fmt.Println("array to xml:", string(data))

    arr2, err2 := XmlToArray(data)
    if err2 != nil {
        fmt.Println("error:", err2)
        return
    }
    fmt.Println("xml to array:", arr2)
}

Exécutez le code ci-dessus, nous pouvons voir les résultats suivants :

array to xml: <?xml version="1.0" encoding="UTF-8"?>
<users version="1.0">
    <user>
        <id>1</id><name>Tom</name><age>20</age>
    </user>
    <user>
        <id>2</id><name>Jerry</name><age>22</age>
    </user>
</users>

xml to array: [map[id:1 name:Tom age:20] map[id:2 name:Jerry age:22]] 

. Cela signifie que nous avons réussi à convertir le tableau au format XML et que nous pouvons analyser correctement les données au format XML dans un tableau du type correspondant.

4. Résumé

Cet article présente principalement comment utiliser le package XML de Golang pour convertir des tableaux au format XML et convertir le format XML en tableaux. Bien que le package XML de Golang lui-même ne fournisse pas de prise en charge correspondante pour les tableaux, nous pouvons sérialiser et désérialiser les tableaux en convertissant les tableaux en structures et en convertissant les structures en XML. Dans les projets réels, nous devons effectuer un développement personnalisé en fonction de besoins spécifiques et améliorer et optimiser continuellement l'interface pour obtenir de meilleurs résultats d'utilisation.

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!

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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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

Porce de variable PHP expliquée
4 Il y a quelques semaines By 百草
Conseils pour écrire des commentaires PHP
4 Il y a quelques semaines By 百草
Commentant le code en php
4 Il y a quelques semaines By 百草
<🎜>: Grow A Garden - Guide complet des marchands itinérants
3 Il y a quelques semaines By Jack chen

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Tutoriel PHP
1510
276
Comment créer un serveur Web dans Go Comment créer un serveur Web dans Go Jul 15, 2025 am 03:05 AM

Il n'est pas difficile de créer un serveur Web écrit en Go. Le noyau réside dans l'utilisation du package net / http pour implémenter des services de base. 1. Utilisez Net / HTTP pour démarrer le serveur le plus simple: enregistrez les fonctions de traitement et écoutez les ports via quelques lignes de code; 2. Gestion du routage: utilisez Servmux pour organiser plusieurs chemins d'interface pour une gestion structurée facile; 3. Pratiques communes: routage de groupe par modules fonctionnels et utiliser des bibliothèques tierces pour prendre en charge l'appariement complexe; 4. Service de fichiers statique: Fournissez des fichiers HTML, CSS et JS via HTTP.FileServer; 5. Performances et sécurité: activer HTTPS, limiter la taille du corps de la demande et définir le délai d'attente pour améliorer la sécurité et les performances. Après avoir maîtrisé ces points clés, il sera plus facile d'élargir les fonctionnalités.

Opter pour un traitement audio / vidéo Opter pour un traitement audio / vidéo Jul 20, 2025 am 04:14 AM

Le cœur du traitement audio et vidéo consiste à comprendre le processus de base et les méthodes d'optimisation. 1. Le processus de base comprend l'acquisition, le codage, la transmission, le décodage et la lecture, et chaque lien a des difficultés techniques; 2. Des problèmes courants tels que l'audio et l'aberration vidéo, le retard de latence, le bruit sonore, l'image floue, etc. peuvent être résolues par ajustement synchrone, optimisation de codage, module de réduction du bruit, ajustement des paramètres, etc.; 3. Il est recommandé d'utiliser FFMPEG, OpenCV, WebBrTC, GStreamer et d'autres outils pour atteindre des fonctions; 4. En termes de gestion des performances, nous devons prêter attention à l'accélération matérielle, à la définition raisonnable des fréquences d'images de résolution, à des problèmes de concurrence et de fuite de mémoire de contrôle. La maîtrise de ces points clés contribuera à améliorer l'efficacité du développement et l'expérience utilisateur.

Développer des opérateurs de Kubernetes en Go Développer des opérateurs de Kubernetes en Go Jul 25, 2025 am 02:38 AM

La façon la plus efficace d'écrire un kubernetesoperator est d'utiliser Go pour combiner kubebuilder et contrôleur-runtime. 1. Comprendre le modèle de l'opérateur: définir les ressources personnalisées via CRD, écrivez un contrôleur pour écouter les changements de ressources et effectuer des boucles de réconciliation pour maintenir l'état attendu. 2. Utilisez KubeBuilder pour initialiser le projet et créer des API pour générer automatiquement les CRD, les contrôleurs et les fichiers de configuration. 3. Définissez la structure de spécification et de statut de CRD dans API / V1 / MYAPP_TYPES.go, et exécutez MakeManifests pour générer CRDYAML. 4. Réconcilier dans le contrôleur

Go Techniques d'optimisation de requête pour PostgreSQL / MySQL Go Techniques d'optimisation de requête pour PostgreSQL / MySQL Jul 19, 2025 am 03:56 AM

TooptimizeGoapplications interagissant avec unpostgresqlorysql, focusonindexing, sélectiveQueries, connexion-standling, cache, andorfifficiency.1) useproperIndexing - identifier la présence de coloconnes et les composites de ligne et les colomnquer

Les canaux Go expliqués Les canaux Go expliqués Jul 15, 2025 am 03:01 AM

Les canaux GO sont divisés en deux types: tamponné et non tamponné. Le canal non tamponné nécessite à la fois l'envoi et la réception pour être préparés en même temps, adaptés aux opérations coordonnées et synchrones; Bien que le canal tamponné permet aux données d'être stockées temporairement, adaptées aux composants du système de découplage. Lorsque vous l'utilisez, veillez à éviter de bloquer en écrivant sur le canal tampon complet ou en lisant à partir du canal vide, et en fermant le canal à temps pour informer le récepteur de l'extrémité des données.

Go OAuth2 Implémentations du client et du serveur Go OAuth2 Implémentations du client et du serveur Jul 16, 2025 am 02:57 AM

L'implémentation OAuth2 est divisée en client et serveur. Le client utilise le package golang.org/x/oauth2. Les étapes sont: 1. Présentez le package; 2. Configurez les informations du client et créez un objet de configuration; 3. Générer un lien d'autorisation; 4. Traitez le rappel pour obtenir le jeton; 5. Construisez un client HTTP avec autorisation. Le serveur prend GO-OAUTH2 / OAuth2 comme exemple, et le processus comprend: 1. Initialiser le stockage; 2. Définir les informations du client; 3. Créer une instance de service OAuth2; 4. Écrire l'autorisation de traitement des itinéraires et les demandes de jetons. Les notes incluent: les problèmes de domaine croisé, la vérification du statut, les HTTPs activés, la gestion de la validité des jetons et la granularité du contrôle de la portée.

La lecture de Stdin dans GO par l'exemple La lecture de Stdin dans GO par l'exemple Jul 27, 2025 am 04:15 AM

Utilisez fmt.scanf pour lire l'entrée formatée, adaptée aux données structurées simples, mais la chaîne est coupée lors de la rencontre des espaces; 2. Il est recommandé d'utiliser Bufio.Scanner pour lire la ligne par ligne, prend en charge les entrées multi-lignes, la détection EOF et l'entrée du pipeline et peut gérer les erreurs de numérisation; 3. Utilisez io.readall (os.stdin) pour lire toutes les entrées à la fois, adapté au traitement de grandes données de bloc ou de flux de fichiers; 4. La réponse clé en temps réel nécessite des bibliothèques tierces telles que golang.org/x/term, et Bufio est suffisant pour les scénarios conventionnels; Suggestions pratiques: utilisez fmt.scan pour une entrée simple interactive, utilisez bufio.scanner pour une entrée de ligne ou un pipeline, utilisez io.readall pour les données de gros bloc et gérez toujours

Comment détecter un canal fermé à Golang Comment détecter un canal fermé à Golang Jul 15, 2025 am 03:01 AM

Dans le langage GO, il est impossible de détecter directement si le canal est fermé, mais il peut être jugé indirectement par les méthodes suivantes: 1. Utilisez la syntaxe de la virgule OK pour recevoir des données, si OK est faux, le canal a été fermé; 2. Utilisez la branche par défaut pour essayer la réception non bloquante dans l'instruction SELECT pour détecter l'état; 3. Maintenir manuellement la variable booléenne Enregistrer l'état fermé, qui convient aux flux de contrôle complexes. Ces méthodes sont sélectionnées et utilisées en fonction du scénario spécifique.

See all articles