Simpan petikan tunggal dalam fail YAML semasa mengedit

PHPz
Lepaskan: 2024-02-12 12:03:08
ke hadapan
389 orang telah melayarinya

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

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.

Kandungan soalan

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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 }}'
Salin selepas log masuk

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 }}
Salin selepas log masuk

Seperti yang anda lihat, petikan tunggal telah hilang. Sebarang cadangan?

Penyelesaian

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.SingleQuotedStyleNilai mempunyai

yaml.Style

sama dengan Value 字段类型更改为 yaml.Nodeyaml.SingleQuotedStyle

Untuk mengaksesnya (dan tidak kehilangannya selepas unmarshalling), tukar jenis medan

Value kepada yaml.Nod.

Variables []struct {
    Name  string    `yaml:"name"`
    Value yaml.Node `yaml:"value"`
} `yaml:"variables"`
Salin selepas log masuk
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
    }
}
Salin selepas log masuk
🎜Taman permainan🎜🎜🎜

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!