Maison >développement back-end >Golang >Conserver les guillemets simples dans les fichiers YAML lors de la modification
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.
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>
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>
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 }}'
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 }}
Comme vous pouvez le constater, les guillemets simples ont disparu. Aucune suggestion? La fonction
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$$5db79b134e9f6b82c0b36e0489ee08ed. 94b3e26ee717c64999d7867364b1b4a3
e388a4556c0f65e1904146cc1a846beeDans votre cas, le champ <code>Value
字段具有 yaml.Style
等于 yaml.SingleQuotedStyle
Value a
est égal à Value
字段类型更改为 yaml.Node
yaml.SingleQuotedStyle
Value en yaml.Node.
Variables []struct {
Name string `yaml:"name"`
Value yaml.Node `yaml:"value"`
} `yaml:"variables"`
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
}
}
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!