我有一对这样的结构:
type Datacenter struct {
Name string
Key string
Hosts []Host
}
type Host struct {
Name string
Port int
}
然后是一个示例配置文件:
datacenters:
- name: dc1
key: test
hosts:
- name: dc1-host
port: 8200
- name: dc2
key: dc-test
hosts:
- name: dc2-host
port: 8200
我正在使用viper读取配置文件,功能如下:
func getDatacenters() []config.Datacenter {
err := viper.UnmarshalKey("datacenters", &datacenters)
if err != nil {
log.Error("Unable to read hosts key in config file: %s", err)
}
return datacenters
}
我现在想要做的是指定一个可选参数,datacenter
如果指定了,则只返回来自该数据中心的密钥。如果未指定参数,我希望它解组并返回整个内容。
这可能吗?
编辑:我应该补充一点,到目前为止,我所做的只是对它们的范围:
for _, d := range datacenters {
for _, h := range d.Hosts {
}
}
所以可能有更好的方法。