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

Comment analyser efficacement des fichiers YAML complexes dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-14 11:53:02
original
586 Les gens l'ont consulté

How to Effectively Parse Complex YAML Files in Go?

Analyser efficacement les fichiers YAML dans Go

Comprendre comment analyser avec précision les fichiers YAML dans Go est crucial pour diverses applications. En utilisant des structures Go bien définies, on peut interagir efficacement avec les données YAML.

Énoncé du problème

Dans votre requête, vous avez décrit une incapacité à analyser le fichier YAML suivant en utilisant Go :

---
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
...
Copier après la connexion

De plus, vous avez tenté d'utiliser le Go suivant code :

type Config struct {
    Firewall_network_rules map[string][]string
}

...

err = yaml.Unmarshal(yamlFile, &config)
Copier après la connexion

Cependant, cette approche a entraîné une erreur, potentiellement due au manque de structures correspondantes pour les paires clé-valeur src et dst.

Solution

Lorsque le fichier YAML est constitué de listes, l'approche suivante sera suffisent :

---
firewall_network_rules:
  rule1:
    - value1
    - value2
...
Copier après la connexion

Cependant, pour les structures YAML plus complexes, telles que l'exemple service.yaml que vous avez fourni :

apiVersion: v1
kind: Service
...
Copier après la connexion

Vous devrez définir des structures Go personnalisées pour correspondre aux structure du YAML. Par exemple :

type Service struct {
    APIVersion string `yaml:"apiVersion"`
    Kind       string `yaml:"kind"`
    Metadata   struct {
        Name      string `yaml:"name"`
        Namespace string `yaml:"namespace"`
        Labels    struct {
            RouterDeisIoRoutable string `yaml:"router.deis.io/routable"`
        } `yaml:"labels"`
        Annotations struct {
            RouterDeisIoDomains string `yaml:"router.deis.io/domains"`
        } `yaml:"annotations"`
    } `yaml:"metadata"`
    Spec struct {
        Type     string `yaml:"type"`
        Selector struct {
            App string `yaml:"app"`
        } `yaml:"selector"`
        Ports []struct {
            Name       string `yaml:"name"`
            Port       int    `yaml:"port"`
            TargetPort int    `yaml:"targetPort"`
            NodePort   int    `yaml:"nodePort,omitempty"`
        } `yaml:"ports"`
    } `yaml:"spec"`
}
Copier après la connexion

Une fois les structures Go définies, vous pouvez utiliser la fonction yaml.Unmarshal() pour analyser les données YAML dans ces structures. Par exemple :

var service Service

err = yaml.Unmarshal(yourFile, &service)
Copier après la connexion

En suivant ces techniques, vous pouvez analyser efficacement les fichiers YAML et utiliser les données dans vos applications Go. N'oubliez pas d'adapter vos structures Go pour qu'elles correspondent à la structure spécifique de vos fichiers YAML.

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