仅从struct返回特定字段

I have a pair of structs like so:

  type Datacenter struct {
    Name  string
    Key   string
    Hosts []Host
  }

  type Host struct {
    Name string
    Port int
  }

And then an example configuration file:

datacenters:
  - name: dc1
    key: test
    hosts:
      - name: dc1-host
        port: 8200
  - name: dc2
    key: dc-test
    hosts:
      - name: dc2-host
        port: 8200

I'm using viper to read the configuration file, here's the function:

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

}

What I'd like to be able do now is specify an optional parameter, datacenter and if that's specified, to only return the keys from that datacenter. If the parameter is not specified, I'd like it to unmarshal and return the whole thing.

Is this possible?

EDIT: I should add, all I do with this so far is range over them:

for _, d := range datacenters {
      for _, h := range d.Hosts {
  }
}

So it may be there's a better way.