Maison >développement back-end >Golang >Comment analyser des fichiers YAML avec des clés dynamiques dans Go ?

Comment analyser des fichiers YAML avec des clés dynamiques dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-04 02:38:29522parcourir

How to Parse YAML Files with Dynamic Keys in Go?

Analyse YAML du code Go avec des clés dynamiques

Pour analyser le code Go avec des clés dynamiques dans un fichier YAML, suivez ces étapes :

1. Installez la bibliothèque yaml :

<code class="sh">go get gopkg.in/yaml.v2</code>

2. Définissez la structure du modèle :
Créez une structure pour représenter les données YAML. Si vous connaissez toutes les clés possibles, vous pouvez les définir à l'aide de champs normaux, sinon vous pouvez utiliser les champs map[string]interface{} pour contenir des clés dynamiques.

3. Utilisez un Unmarshaler personnalisé (facultatif) :
Si vous devez personnaliser la façon dont les données YAML sont analysées, vous pouvez utiliser un Unmarshaler personnalisé. Cela peut vous aider à gérer des clés dynamiques ou d'autres scénarios d'analyse complexes.

4. Analyser les données YAML :
Utilisez la fonction yaml.Unmarshal pour analyser les données YAML et les désérialiser dans une structure de modèle.

Exemple :
L'exemple suivant montre comment analyser un fichier YAML avec des clés dynamiques :

<code class="go">package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

var data = `
---
development:
  skip-header-validation: true
  V1:
    current: "1.0.0"
    mime_types:
      - application/vnd.company.jk.identity+json;
      - application/vnd.company.jk.user+json;
      - application/vnd.company.jk.role+json;
      - application/vnd.company.jk.scope+json;
      - application/vnd.company.jk.test+json;
    skip-mime-type-validation: true
    skip-version-validation: true
  V2:
    current: "2.0.0"
    mime_types:
      - application/vnd.company.jk.identity+json;
      - application/vnd.company.jk.user+json;
      - application/vnd.company.jk.role+json;
      - application/vnd.company.jk.scope+json;
      - application/vnd.company.jk.test+json;

`

type MajorVersion struct {
    Current                 string   `yaml:"current"`
    MimeTypes               []string `yaml:"mime_types"`
    SkipVersionValidation  bool     `yaml:"skip-version-validation"`
    SkipMimeTypeValidation bool     `yaml:"skip-mime-type-validation"`
}

type Environment struct {
    SkipHeaderValidation bool
    Versions             map[string]MajorVersion `yaml:",inline"`
}

func main() {
    e := map[string]Environment{}
    if err := yaml.Unmarshal([]byte(data), &e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}</code>

Sortie :

map[string]main.Environment{
    "development": {
        SkipHeaderValidation: true,
        Versions: {
            "V1": {
                Current:                "1.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},
                SkipVersionValidation:  true,
                SkipMimeTypeValidation: true,
            },
            "V2": {
                Current:                "2.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},
                SkipVersionValidation:  false,
                SkipMimeTypeValidation: false,
            },
        },
    },
}

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