首頁 >後端開發 >Golang >編輯時在 YAML 檔案中保留單引號

編輯時在 YAML 檔案中保留單引號

PHPz
PHPz轉載
2024-02-12 12:03:08468瀏覽

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

php小編香蕉介紹:在進行編輯時,保留單引號是一個重要的技巧。在YAML檔案中,使用單引號可以確保文字內容被原樣保留,不會受到解析器的解釋。這種方式可以避免特殊字元或特定格式的資料出現錯誤,確保文件內容的準確性和完整性。無論是處理設定檔還是編寫程式碼,保留單引號都是一個很好的習慣,能夠幫助我們更好地管理和維護程式碼。

問題內容

我想編輯 YAML 檔案中某些鍵的值,同時保持其餘鍵不變。我編寫了一個片段來為這些鍵插入一些值,但生成的新檔案不維護單引號 (')。如何避免這種情況?

我的程式碼:

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

我的結構:

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

編輯前歸檔 yaml

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 }}'

編輯後歸檔yaml

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 }}

如您所見,單引號消失了。有什麼建議嗎?

解決方法

yaml.Unmarshal 函數將yaml 值解組到不帶元資料的自訂結構(stylekind) > 等)。 yaml.Marshal 函數正在處理自訂結構,將元資料值設為預設值。要存取元資料的字段,需要使用 yaml.Node$ $endc$$5db79b134e9f6b82c0b36e0489ee08ed。 94b3e26ee717c64999d7867364b1b4a3 e388a4556c0f65e1904146cc1a846bee在您的情況下 <code>Value 欄位具有 yaml.Style 等於 yaml.SingleQuotedStyle

要存取它(解組後不要遺失),請將 Value 欄位類型變更為 yaml.Node

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
    }
}

遊樂場

以上是編輯時在 YAML 檔案中保留單引號的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除