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

2024年 2月 12日 61.6k 0

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

php小编香蕉介绍:在进行编辑时,保留单引号是一个重要的技巧。在YAML文件中,使用单引号可以确保文本内容被原样保留,不会受到解析器的解释。这种方式可以避免特殊字符或者特定格式的数据出现错误,确保文件内容的准确性和完整性。无论是处理配置文件还是编写代码,保留单引号都是一个很好的习惯,能够帮助我们更好地管理和维护代码。

问题内容

我想编辑 YAML 文件中某些键的值,同时保持其余键不变。我编写了一个片段来为这些键插入一些值,但生成的新文件不维护单引号 (')。如何避免这种情况?

我的代码:

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
}

登录后复制

我的结构:

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

登录后复制

编辑前归档 yaml

trigger: none

variables:
- name: app_name
value: ''
- name: cluster_name
value: ''
- name: component_name
value: ''
- 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 }}'

登录后复制

编辑后归档yaml

trigger: none
variables:
- name: app_name
value: test
- name: cluster_name
value: test
- name: component_name
value:
- 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 }}

登录后复制

如您所见,单引号消失了。有什么建议吗?

解决方法

yaml.Unmarshal 函数将 yaml 值解组到不带元数据的自定义结构(style、kind) > 等)。
yaml.Marshal 函数正在处理自定义结构,将元数据值设置为默认值。要访问元数据的字段,需要使用 yaml.Node$ $endc$$

在您的情况下 Value 字段具有 yaml.Style 等于 yaml.SingleQuotedStyle

要访问它(解组后不要丢失),请将 Value 字段类型更改为 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
}
}

登录后复制

游乐场

以上就是编辑时在 YAML 文件中保留单引号的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论