'How to add map into the same struct which is used to deserialize json configs?

I am working on deserializing json into a struct as shown below and it works fine.

type DataConfigs struct {
    ClientMetrics []Client `json:"ClientMetrics"`
}

type Client struct {
    ClientId  int  `json:"clientId"`
    .....
    .....
}

const (
    ConfigFile = "clientMap.json"
)

func ReadConfig(path string) (*DataConfigs, error) {
    files, err := utilities.FindFiles(path, ConfigFile)
  // check for error here
  
    var dataConfig DataConfigs
    body, err := ioutil.ReadFile(files[0])
  // check for error here
    err = json.Unmarshal(body, &dataConfig)
  // check for error here

    return &dataConfig, nil
}

Now I am trying to build a map of integer and Client using DataConfigs object that was created as shown above in the code. So I created a method to do the job as shown below and I modified ReadConfig method to do that too.

func ReadConfig(path string, logger log.Logger) (*DataConfigs, error) {
  files, err := utilities.FindFiles(path, ConfigFile)
  // check for error here
  
  var dataConfig DataConfigs
  body, err := ioutil.ReadFile(files[0])
  // check for error here
  err = json.Unmarshal(body, &dataConfig)
  // check for error here

  idx := BuildIndex(dataConfig)
  // now how to add this idx and dataConfig object in one struct?
  
  return &dataConfig, nil
}

func BuildIndex(dataConfig DataConfigs) map[int]Client {
    m := make(map[int]Client)
    for _, dataConfig := range dataConfig.ClientMetrics {
        m[dataConfig.ClientId] = dataConfig
    }
    return m
}

My confusion is - Should I modify DataConfigs struct to add idx map too and then return that struct from ReadConfig method or should I create a new struct to handle that?

Basically I want to return DataConfigs struct which has ClientMetrics array along with idx map. How can I do this here? I am slightly confuse because I started with golang recently.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source