Heim > Backend-Entwicklung > Golang > Behalten Sie beim Bearbeiten einfache Anführungszeichen in YAML-Dateien bei

Behalten Sie beim Bearbeiten einfache Anführungszeichen in YAML-Dateien bei

PHPz
Freigeben: 2024-02-12 12:03:08
nach vorne
459 Leute haben es durchsucht

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

Einführung in die Banane des PHP-Editors: Bei der Bearbeitung ist die Beibehaltung einfacher Anführungszeichen eine wichtige Fähigkeit. In YAML-Dateien stellt die Verwendung von einfachen Anführungszeichen sicher, dass der Textinhalt intakt bleibt und nicht vom Parser interpretiert wird. Mit dieser Methode können Fehler bei Sonderzeichen oder Daten in bestimmten Formaten vermieden und die Richtigkeit und Vollständigkeit des Dateiinhalts sichergestellt werden. Unabhängig davon, ob Sie mit Konfigurationsdateien arbeiten oder Code schreiben, ist die Verwendung von einfachen Anführungszeichen eine gute Angewohnheit und kann uns dabei helfen, den Code besser zu verwalten und zu pflegen.

Frageninhalt

Ich möchte die Werte bestimmter Schlüssel in einer YAML-Datei bearbeiten, während der Rest unverändert bleibt. Ich habe einen Ausschnitt geschrieben, um einige Werte für diese Schlüssel einzufügen, aber die neu generierte Datei enthält keine einfachen Anführungszeichen ('). Wie kann man diese Situation vermeiden?

Mein Code:

<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>
Nach dem Login kopieren

Meine Struktur:

<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>
Nach dem Login kopieren

Archivieren Sie Yaml vor der Bearbeitung

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 }}'
Nach dem Login kopieren

Archivieren Sie Yaml nach der Bearbeitung

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 }}
Nach dem Login kopieren

Wie Sie sehen können, sind die einfachen Anführungszeichen verschwunden. Irgendwelche Vorschläge?

Workaround

yaml.Unmarshal Funktion unmarshallt yaml-Werte in benutzerdefinierte Strukturen ohne Metadaten (style, kind usw.). yaml.Marshal Die Funktion verarbeitet die benutzerdefinierte Struktur und setzt den Metadatenwert auf den Standardwert. Um auf Metadatenfelder zuzugreifen, verwenden Sie yaml.Node$ $endc$$</a>. </p> <p>In Ihrem Fall hat das Feld <code>Value 字段具有 yaml.Style 等于 yaml.SingleQuotedStyleValue

yaml.Style

ist gleich Value 字段类型更改为 yaml.Nodeyaml.SingleQuotedStyle

Um darauf zuzugreifen (und es nach dem Unmarshalling nicht zu verlieren), ändern Sie den Feldtyp

Wert in yaml.Node.

Variables []struct {
    Name  string    `yaml:"name"`
    Value yaml.Node `yaml:"value"`
} `yaml:"variables"`
Nach dem Login kopieren
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
    }
}
Nach dem Login kopieren
🎜Spielplatz🎜🎜🎜

Das obige ist der detaillierte Inhalt vonBehalten Sie beim Bearbeiten einfache Anführungszeichen in YAML-Dateien bei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage