仅返回struct

时间:2017-09-21 18:49:21

标签: go struct viper-go

我有一对像这样的结构:

  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 {
  }
}

所以可能有更好的方法。

0 个答案:

没有答案