Rumah >pembangunan bahagian belakang >Golang >Simpan petikan tunggal dalam fail YAML semasa mengedit

Simpan petikan tunggal dalam fail YAML semasa mengedit

PHPz
PHPzke hadapan
2024-02-12 12:03:08468semak imbas

编辑时在 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>

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?

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$$5db79b134e9f6b82c0b36e0489ee08ed. 94b3e26ee717c64999d7867364b1b4a3 e388a4556c0f65e1904146cc1a846beeDalam 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"`
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
    }
}

🎜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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam