Maison >développement back-end >Golang >Pourquoi mon Go WaitGroup ne se termine-t-il pas lors du téléchargement simultané de fichiers ?
WaitGroup ne se termine pas dans Go Concurrency
Le code fourni tente de télécharger et d'enregistrer simultanément plusieurs fichiers à partir d'une liste d'URL. Cependant, la goroutine principale ne se termine jamais car le sync.WaitGroup ne se termine jamais.
Deux problèmes identifiés :
Code optimisé :
func downloadFromURL(url string, wg *sync.WaitGroup) error { defer wg.Done() // Moved to the beginning of the function ... // Other code } func main() { ... for _, url := range links { if isExcelDocument(url) { wg.Add(1) go downloadFromURL(url, &wg) // Pass pointer to WaitGroup } else { fmt.Printf("Skipping: %v \n", url) } } ... }
En résolvant ces problèmes, le WaitGroup suivra avec précision le nombre de goroutines en cours d'exécution, et la goroutine principale se terminera une fois tous les téléchargements terminés.
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!