Maison >développement back-end >Golang >Comment les Goroutines et les WaitGroups peuvent-ils être utilisés pour télécharger plusieurs fichiers simultanément dans Golang ?
Téléchargement de plusieurs fichiers en parallèle avec des goroutines dans Golang
Dans cet article, nous explorerons comment utiliser les goroutines dans Golang pour télécharger plusieurs fichiers simultanément à partir d'un emplacement distant.
Considérez l'extrait de code suivant, qui tente de télécharger des fichiers depuis Dropbox :
<code class="go">package main import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "sync" ) ... func main() { ... for i, file := range flr.FileList { go download_file(file, tr) if i >= 2 { break } } ... }</code>
Cependant, lorsque vous tentez d'exécuter ce code à l'aide de goroutines, il échoue. En effet, la goroutine principale se termine avant que les goroutines responsables du téléchargement des fichiers n'aient terminé leurs tâches.
Pour résoudre ce problème et garantir que la goroutine principale attend la fin des goroutines avant de quitter, nous pouvons utiliser une synchronisation. WaitGroup, comme suit :
<code class="go">package main import ( ... "sync" ) ... func main() { ... var wg sync.WaitGroup for i, file := range flr.FileList { wg.Add(1) go download_file(file, tr, &wg) if i >= 2 { break } } wg.Wait() ... }</code>
Ici, nous créons un sync.WaitGroup et l'utilisons pour suivre le nombre de goroutines qui n'ont pas encore terminé leurs tâches. Cela permet à la goroutine principale d'attendre que toutes les goroutines aient terminé leurs tâches avant de quitter.
Dans la fonction download_file modifiée, nous appelons wg.Done() pour signaler l'achèvement de la goroutine, en décrémentant le compteur wg.
En utilisant des goroutines et un groupe d'attente, nous pouvons télécharger efficacement plusieurs fichiers simultanément, améliorant ainsi l'efficacité globale du processus de téléchargement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!