pengenalan pisang editor php: Apabila mengedit, mengekalkan petikan tunggal ialah kemahiran penting. Dalam fail YAML, menggunakan petikan tunggal memastikan kandungan teks dikekalkan secara utuh dan tidak akan ditafsirkan oleh penghurai. Kaedah ini boleh mengelakkan ralat dalam aksara khas atau data dalam format tertentu dan memastikan ketepatan dan kesempurnaan kandungan fail. Sama ada anda berurusan dengan fail konfigurasi atau menulis kod, menyimpan petikan tunggal adalah tabiat yang baik dan boleh membantu kami mengurus dan mengekalkan kod dengan lebih baik.
Saya mahu mengedit nilai kunci tertentu dalam fail YAML sambil mengekalkan selebihnya tidak berubah. Saya menulis coretan untuk memasukkan beberapa nilai untuk kunci ini, tetapi fail baharu yang dihasilkan tidak mengekalkan petikan tunggal ('
). Bagaimana untuk mengelakkan situasi ini?
Kod saya:
<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>
Struktur saya:
<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>
Arkib yaml sebelum mengedit
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 }}'
Arkibkan yaml selepas diedit
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 }}
Seperti yang anda lihat, petikan tunggal telah hilang. Sebarang cadangan?
yaml.Unmarshal
berfungsi unmarshals yaml nilai ke dalam struktur tersuai tanpa metadata (style, kind, dsb.).
yaml.Marshal
Fungsi ini memproses struktur tersuai, menetapkan nilai metadata kepada nilai lalai. Untuk mengakses medan metadata, gunakan yaml.Node$ $endc$$</a>. </p>
<p>Dalam kes anda, medan <code>Value
字段具有 yaml.Style
等于 yaml.SingleQuotedStyle
Nilai mempunyai
sama dengan Value
字段类型更改为 yaml.Node
yaml.SingleQuotedStyle
Value kepada yaml.Nod.
Atas ialah kandungan terperinci Simpan petikan tunggal dalam fail YAML semasa mengedit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
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
}
}