Maison >développement back-end >Golang >Comment analyser efficacement des fichiers YAML complexes dans Go ?

Comment analyser efficacement des fichiers YAML complexes dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 11:53:02655parcourir

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
...

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)

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
...

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

apiVersion: v1
kind: Service
...

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"`
}

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)

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!

Déclaration:
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