Моя функция загружает данные, анализирует их и возвращает некоторый результат.Я хотел бы одновременно запустить много экземпляров функции и подвести их итоги.Вот мое решение с использованием Mutex
:
var lock sync.Mutex
increment := func(data engine2.DownloadResult) {
lock.Lock()
defer lock.Unlock()
albums += data.Album
singles += data.Single
}
var wg sync.WaitGroup
foo := func(id uint) {
defer wg.Done()
result := engine.DownloadPlaylist(id)
increment(*result)
}
for _, playlist := range repository.PlaylistRepository.Fetch() {
wg.Add(1)
go foo(playlist.Id)
}
wg.Wait()
Как я знаю channels
рекомендуются механизмы синхронизации в Go.Не могли бы вы показать мне, как я могу переписать эту задачу с использованием каналов?