【问题标题】:YAML forming via Golang通过 Golang 形成 YAML
【发布时间】:2020-09-07 18:31:33
【问题描述】:

请帮助创建正确的 YAML 结构。 我需要收到这样的东西:

groups:
  - name: Group1
    targets:
    - host1
    - host2
  - name: Group2
    targets:
    - host1
    - host2

我已经编写了下一个工作但不正确的代码:

type YamlConfig struct {
    Groups struct {
            Name string `yaml:"name"`
            Targets []string `yaml:"targets"`
    } `yaml:"groups"`
}

var config YamlConfig
var hosts []string = []string{"host1", "host2"}
for host := range hosts {
    config.Groups.Name = "Group"+strconv.Itoa(host)
    config.Groups.Targets = hosts
}

y, err := yaml.Marshal(config)
if err != nil {
    fmt.Printf("Marshal: %v", err)
}

fmt.Println(string(y))

但是这个例子只形成了这个结构:

groups:
  name: Group1
  targets:
  - host1
  - host2

请帮助以正确的方式获得第一个结果

【问题讨论】:

    标签: go yaml


    【解决方案1】:

    你需要稍微改变一下你的结构。由于 Group 是一个列表,因此您需要在 go struct 中使用一个数组。然后在填充数据时,创建一个新组并附加到配置。

    package main
    
    import (
        "fmt"
        "strconv"
    
        "gopkg.in/yaml.v2"
    )
    
    func main() {
        type Group struct {
            Name    string   `yaml:"name"`
            Targets []string `yaml:"targets"`
        }
    
        type YamlConfig struct {
            Groups []Group `yaml:"groups"`
        }
    
        var config YamlConfig
        var hosts []string = []string{"host1", "host2"}
        for host := range hosts {
            var group Group
            group.Name = "Group" + strconv.Itoa(host)
            group.Targets = hosts
            config.Groups = append(config.Groups, group)
        }
    
        y, err := yaml.Marshal(config)
        if err != nil {
            fmt.Printf("Marshal: %v", err)
        }
    
        fmt.Println(string(y))
    }
    
    

    【讨论】:

      【解决方案2】:

      您还需要Group 的数组/切片,以便您的字段“组”可以具有[]group[]Group 类型。使用它自己的结构来做到这一点。

      类似:

      type group struct {
          Name string `yaml:"name"`
          Targets []string `yaml:"targets"`
      }
      
      type YamlConfig struct {
          Groups []group `yaml:"groups"`
      }
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-15
        • 2018-12-21
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        相关资源
        最近更新 更多