从 YAML 文档解析嵌套映射

Parse nested map from a YAML document

我遇到了(我认为是)一个简单的问题。 我正在尝试使用 commando 创建一个 CLI,这个 CLI 将读取一个配置 yaml,然后执行一些操作。但是,我被困在 config.yaml 的解析中 以下是我的代码:

type Config struct {
    Apps map[string]App `yaml:"apps"`
    Branch string  `yaml:"branch"`
}
type App struct {
    hostName string `yaml:"hostName"`
}
.
. //func main, and other standard stuff goes here
.
commando.
        Register("read").
        AddArgument("config", "read yaml file", "./config.yaml").
        SetAction(
            func(args map[string]commando.ArgValue, flags map[string]commando.FlagValue) {
                    //args["config"] equates to ./config.yaml and I will give that below
                    file, err := ioutil.ReadFile(args["config"].Value)
                    if err != nil {
                        log.Fatal(err)
                    }

                    var data2 Config
                    err3 := yaml.Unmarshal(file, &data2)
                    if err3 != nil {
                        log.Fatal(err3)
                    }
                    fmt.Printf("Ad demo?: %#v\n", data2.Apps["ad-demo"].hostName)
                    fmt.Printf("Data 2: %#v\n", data2)
            })
        commando.Parse(nil)

我的config.yaml如下:

apps:
  ad-tag:
    hostName: ad-tag1.krg.io
  ad-demo:
    hostName: demo1.krg.io
branch: KAT-3821

大部分有效。问题是以下打印:

Ad demo?: ""
Data 2: main.Config{Apps:map[string]main.App{"ad-demo":main.App{hostName:""}, "ad-tag":main.App{hostName:""}}, Branch:"KAT-3821"}

主机名显示为空字符串。

知道我做错了什么吗?我觉得这应该很简单,但我终究无法弄清楚我做错了什么。

谢谢

应导出主机名,即大写

type App struct {
    HostName string `yaml:"hostName"`
}

如果不导出它,yamljson 等包将无法读取该字段并填充它。