从 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"`
}
如果不导出它,yaml
或 json
等包将无法读取该字段并填充它。
我遇到了(我认为是)一个简单的问题。 我正在尝试使用 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"`
}
如果不导出它,yaml
或 json
等包将无法读取该字段并填充它。