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

Comment analyser les fichiers YAML dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 06:07:12669parcourir

How do I Parse YAML Files in Go?

Analyse des fichiers YAML dans Go

L'analyse des fichiers YAML dans Go nécessite de comprendre la structure des données et les types de données appropriés pour les représenter.

Exemple : Analyse d'un fichier de règles réseau de pare-feu

Considérez le fichier YAML suivant avec un réseau de pare-feu règles :

---
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
...

Pour analyser ce fichier, nous définirons une structure de configuration pour représenter le contenu YAML :

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

Nous utiliserons ensuite le package yaml pour désorganiser le YAML fichier dans la structure Config :

func main() {
    filename, _ := filepath.Abs("./fruits.yml")
    yamlFile, err := ioutil.ReadFile(filename)

    if err != nil {
        panic(err)
    }

    var config Config

    err = yaml.Unmarshal(yamlFile, &config)
    if err != nil {
        panic(err)
    }

    fmt.Printf("Value: %#v\n", config.Firewall_network_rules)
}

Cette approche fonctionne car le fichier YAML utilise une structure de carte imbriquée qui correspond à la structure Config.

Exemple : Analyse d'un fichier YAML de service

Pour analyser un fichier YAML plus complexe comme un manifeste de service Kubernetes, nous allons créer une structure plus complexe :

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

Nous allons ensuite désorganiser le fichier YAML dans ce struct :

var service Service

err = yaml.Unmarshal(yourFile, &service)
if err != nil {
    panic(err)
}

fmt.Print(service.Metadata.Name)

En utilisant des structures appropriées qui correspondent à la structure YAML, nous pouvons analyser et représenter efficacement des données YAML complexes dans Go.

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