我的函數下載數據,解析它并返回一些結果。我想同時啟動該函數的多個實例并總結它們的結果。這是我的解決方案,使用Mutex:var lock sync.Mutexincrement := func(data engine2.DownloadResult) { lock.Lock() defer lock.Unlock() albums += data.Album singles += data.Single}var wg sync.WaitGroupfoo := 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()據我所知,channelsGo 中推薦使用同步機制。您能告訴我如何使用通道重寫此任務嗎?
1 回答

紅糖糍粑
TA貢獻1815條經驗 獲得超6個贊
有多種使用渠道的解決方案。一個可能看起來像這樣:
ch := make(chan *engine2.DownloadResult)
wg := sync.WaitGroup()
go func() {
for result := range ch {
increment_without_lock(result)
}
}()
for _, playlist := range repository.PlaylistRepository.Fetch() {
id := playlist.Id
wg.Add(1)
go func() {
defer wg.Done()
ch <- engine.DownloadPlaylist(id)
}()
}
wg.Wait()
close(ch)
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消