我想使用地图的键从API请求某些内容,然后根据API的响应更新相应的值。
我的猜测是以下代码。
或者也许会采用这种方法,在迭代之前将映射键收集到数组中 然后使用数组条目进行请求并修改地图
wg := &sync.WaitGroup{}
wg.Add(len(someMap))
sem := semaphore.NewWeighted(maxWorkers)
ctx := context.TODO()
mutex := &sync.RWMutex{}
mutex.RLock()
for k,v := range someMap {
mutex.RUnlock()
go func(k,v) {
defer wg.Done()
sem.Acquire(ctx,1)
res,err := API.REQUEST(k)
sem.Release(1)
if err != nil {
return
}
v.SomeElement = res.SomeElement
mutex.Lock()
someMap[k] = v
mutex.Unlock()
}(k,v)
mutex.RLock()
}
mutex.RUnlock()
wg.Wait()