0

我有一对这样的结构:

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

所以可能有更好的方法。

4

0 回答 0