Как проверить, существует ли значение в структуре и сохранить другое значение в массиве - PullRequest
0 голосов
/ 08 марта 2019

Я не совсем уверен, как это сделать в Go, я только начинаю с ним работать, поэтому не знаю, как это сделать.

Идея такова: у меня есть struct, созданный внутри функции:

XSiteGroup := struct {
        siteURL string
        siteIDs []string
    }{}

Я реализовал запрос, который получает массив объектов; эти объекты имеют следующую структуру:

{
   "siteId": "",
   "merchantName": "",
   "friendlyTitle": "",
   "url": ""
 }

То, что я пытаюсь сделать, это перебрать этот массив и сохранить каждый url, который я нахожу как «ключ» без дубликатов, а затем сохранить значение siteId каждого объекта в массиве siteIDs структура XSiteGroup. Итак, давайте скажем следующий сценарий:

{
   "siteId": "5050",
   "merchantName": "",
   "friendlyTitle": "",
   "url": "url1.com"
},
{
   "siteId": "4050",
   "merchantName": "",
   "friendlyTitle": "",
   "url": "url2.com"
},
{
   "siteId": "8060",
   "merchantName": "",
   "friendlyTitle": "",
   "url": "url1.com"
}

Имея результат сверху, мне нужно было бы сохранить что-то вроде:

{
  siteURL: "url1.com",
  siteIDs: ["5050", "8060"]
}

У меня сейчас что-то вроде этого, чтобы зациклить массив сайтов, которые у меня есть:

for _, site := range xwebsites {
        u, _ := url.Parse(site.URL)
        urlString := strings.ReplaceAll(u.Host, "www.", "")

        // So I'm thinking here I should handle the struct I created to store values 
        }

Пожалуйста, дайте мне знать, если мне неясно или какая дополнительная информация необходима.

1 Ответ

1 голос
/ 08 марта 2019

Если значение не существует, вы должны его создать. Вы можете проверить это с помощью value, ok := map[key].

type xsitegroup struct {
    url     string
    ids     []string
}

# A mapping between urls and their site groups.
sitegroups := make(map[string]*xsitegroup)

for _, website := range xwebsites {
    url := website["url"]

    sitegroup, ok := sitegroups[url]

    # A sitegroup for this URL doesn't exist
    if !ok {
        # Create the sitegroup
        sitegroup = &xsitegroup{ url: url, ids: []string{} }
        # Add it to the mapping
        sitegroups[url] = sitegroup
    }

    # Append the site id.   
    sitegroup.ids = append(sitegroup.ids, website["siteId"])
}
...