Rumah >pembangunan bahagian belakang >Golang >Simpan petikan tunggal dalam fail YAML semasa mengedit
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$$5db79b134e9f6b82c0b36e0489ee08ed. 94b3e26ee717c64999d7867364b1b4a3
e388a4556c0f65e1904146cc1a846beeDalam kes anda, medan <code>Value
字段具有 yaml.Style
等于 yaml.SingleQuotedStyle
Nilai mempunyai
sama dengan Value
字段类型更改为 yaml.Node
yaml.SingleQuotedStyle
Value kepada yaml.Nod.
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
}
}
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!