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.
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>
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>
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 }}'
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 }}
Wie Sie sehen können, sind die einfachen Anführungszeichen verschwunden. Irgendwelche Vorschläge?
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.SingleQuotedStyle
Value
ist gleich Value
字段类型更改为 yaml.Node
yaml.SingleQuotedStyle
Wert in yaml.Node.
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!
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
}
}