Maison > développement back-end > Golang > Conserver les guillemets simples dans les fichiers YAML lors de la modification

Conserver les guillemets simples dans les fichiers YAML lors de la modification

PHPz
Libérer: 2024-02-12 12:03:08
avant
468 Les gens l'ont consulté

编辑时在 YAML 文件中保留单引号

introduction à la banane de l'éditeur php : lors de l'édition, conserver les guillemets simples est une compétence importante. Dans les fichiers YAML, l'utilisation de guillemets simples garantit que le contenu du texte est conservé intact et ne sera pas interprété par l'analyseur. Cette méthode peut éviter les erreurs dans les caractères spéciaux ou les données dans un format spécifique et garantir l'exactitude et l'exhaustivité du contenu du fichier. Que vous traitiez de fichiers de configuration ou que vous écriviez du code, conserver des guillemets simples est une bonne habitude et peut nous aider à mieux gérer et maintenir le code.

Contenu de la question

Je souhaite modifier les valeurs de certaines clés dans un fichier YAML tout en gardant le reste inchangé. J'ai écrit un extrait pour insérer quelques valeurs pour ces clés, mais le nouveau fichier généré ne conserve pas de guillemets simples ('). Comment éviter cette situation ?

Mon code :

<code>func updateVariables(nameValue, nameCluster string) error {
    
    yamlFile, err := os.ReadFile("path")
    if err != nil {
        return fmt.Errorf("Error reading YAML file: %v", err)
    }

    var config PipelineConfig

    err = yaml.Unmarshal(yamlFile, &config)
    if err != nil {
        return fmt.Errorf("Error parsing YAML file: %v", err)
    }

    for i := range config.Variables {
        switch config.Variables[i].Name {
        case "app_name":
            config.Variables[i].Value = nameValue
        case "cluster_name":
            config.Variables[i].Value = nameCluster

        }
    }

    modifiedYAML, err := yaml.Marshal(&config,)
    if err != nil {
        return fmt.Errorf("Error converting structure to YAML: %v", err)
    }

    err = os.WriteFile("path", modifiedYAML, 0644)
    if err != nil {
        return fmt.Errorf("Error writing modified YAML file: %v", err)
    }
    fmt.Println("File YAML modified.")
    return nil
}
</code>
Copier après la connexion

Ma structure :

<code>type PipelineConfig struct {
    Trigger   string `yaml:"trigger"`
    Variables []struct {
        Name  string `yaml:"name"`
        Value string `yaml:"value"`
    } `yaml:"variables"`
    
    Stages []struct {
        Template   string `yaml:"template"`
        Parameters struct {
            AppName       string `yaml:"app_name"`
            AppRepoBranch string `yaml:"app_repo_branch"`
            LocationEnv   string `yaml:"location_env"`
            ComponentName string `yaml:"component_name"`
            ClusterName   string `yaml:"cluster_name"`
        } `yaml:"parameters"`
    } `yaml:"stages"`
}
</code>
Copier après la connexion

Archiver yaml avant de le modifier

trigger: none

variables:
  - name: app_name
    value: '<name>'
  - name: cluster_name
    value: '<cluster>'
  - name: component_name
    value: '<component>'
  - name: location_env
    value: 'dev'


stages:
  - template: 'tem'
    parameters:
      app_name: '${{ variables.app_name }}'
      app_repo_branch: 'dev'
      location_env: '${{ variables.location_env }}'
      component_name: '${{ variables.component_name }}'
      cluster_name: '${{ variables.cluster_name }}'
Copier après la connexion

Archiver yaml après édition

trigger: none
variables:
    - name: app_name
      value: test
    - name: cluster_name
      value: test
    - name: component_name
      value: <component>
    - name: location_env
      value: dev

stages:
    - template: tem
      parameters:
        app_name: ${{ variables.app_name }}
        app_repo_branch: develop
        location_env: ${{ variables.location_env }}
        component_name: ${{ variables.component_name }}
        cluster_name: ${{ variables.cluster_name }}
Copier après la connexion

Comme vous pouvez le constater, les guillemets simples ont disparu. Aucune suggestion? La fonction

Workaround

yaml.Unmarshal désorganise les valeurs yaml dans des structures personnalisées sans métadonnées (style, kind, etc.). yaml.Marshal La fonction traite la structure personnalisée, en définissant la valeur des métadonnées sur la valeur par défaut. Pour accéder aux champs de métadonnées, utilisez yaml.Node$ $endc$$</a>. </p> <p>Dans votre cas, le champ <code>Value 字段具有 yaml.Style 等于 yaml.SingleQuotedStyleValue a

yaml.Style

est égal à Value 字段类型更改为 yaml.Nodeyaml.SingleQuotedStyle

Pour y accéder (et ne pas le perdre après le démarchage), changez le type de champ

Value en yaml.Node.

Variables []struct {
    Name  string    `yaml:"name"`
    Value yaml.Node `yaml:"value"`
} `yaml:"variables"`
Copier après la connexion
for i := range config.Variables {
    switch config.Variables[i].Name.Value {
    case "app_name":
        config.Variables[i].Value.Value = nameValue
    case "cluster_name":
        config.Variables[i].Value.Value = nameCluster
    }
}
Copier après la connexion
🎜Aire de jeux🎜🎜🎜

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal