我有一个查询API的方法,可以使用或不使用过滤器获取不同日期范围的数据。
func getTopData(country string, startDate time.Time, endDate time.Time, filterID uint) (result map[string][10]topResult) {
response := getRequest(fmt.Sprintf("%s/top/%s/%s-%s/filterid:%d/10",
cfg.API.URI,
country,
startDate.Format("20060102"),
endDate.Format("20060102"),
filterID))
json.Unmarshal(response, &result)
return
}
每次通话都需要大约一分钟才能完成,我需要使用不同的参数调用该方法六次(对于过去三个月中的每一个都没有过滤器,过去三个月每次都有过滤器)。
所以现在我有这样的事情:
var topData [6]map[string][10]topResult
topData[0] = getTopData(country, firstMonthStart, firstMonthEnd, 0)
topData[1] = getTopData(country, secondMonthStart, secondMonthEnd, 0)
topData[2] = getTopData(country, thirdMonthStart, thirdMonthEnd, 0)
topData[3] = getTopData(country, firstMonthStart, firstMonthEnd, filterID)
topData[4] = getTopData(country, secondMonthStart, secondMonthEnd, filterID)
topData[5] = getTopData(country, thirdMonthStart, thirdMonthEnd, filterID)
这样,数据一个接一个地填充。如何在保持topData
数组中结果的顺序的同时并行进行调用(以便索引0处的数据是第一个月没有过滤器,索引4处的数据是第二个月,过滤器等)?
我在考虑使用WaitGroup,但我不确定如何处理实际的结果数据。 :(
因此,首先要将wg *sync.WaitGroup
作为参数添加到getTopData
函数中。在里面我做wg.Add(1)
和defer wg.Done()
。在函数外部,我var wg sync.WaitGroup
并将&wg
传递给getTopData
,进行六次调用,然后wg.Wait()
。但是,如何将结果分配给topData[0]
,topData[1]
等?
答案 0 :(得分:0)
我继续做了以下更改:
getTopData
有一个参数result *map[string][30]topResult
getTopData
getTopData
六次,并将&topData[0]
,&topData[1]
等作为参数传递