我有一对像这样的结构:
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 {
}
}
所以可能有更好的方法。