Paralléliser les téléchargements de fichiers dans Golang à l'aide de Goroutines
Question :
Pouvons-nous tirer parti des goroutines pour télécharger plusieurs fichiers simultanément ?
Contexte du code :
<code class="go">package main import ( "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "sync" ) // ... (existing Dropbox access token handling code) var wg sync.WaitGroup func downloadFile(file File, token TokenResponse) { // Acquire WaitGroup counter wg.Add(1) defer wg.Done() // Release counter when function returns downloadURL := fmt.Sprintf("https://api-content.dropbox.com/1/files/dropbox/%s?access_token=%s", file.Path, token.AccessToken) resp, err := http.Get(downloadURL) if err != nil { panic(err) } defer resp.Body.Close() filename := filepath.Base(file.Path) outFile, err := os.Create(filename) if err != nil { panic(err) } defer outFile.Close() io.Copy(outFile, resp.Body) } func main() { // ... (existing Dropbox authorization and file list code) // Spawn goroutines for file downloads for _, file := range flr.FileList { go downloadFile(file, tr) if count >= 2 { break } } // Wait for all goroutines to complete before exiting wg.Wait() }</code>
Ce code modifié utilise un sync.WaitGroup pour garantir que la goroutine principale ne se ferme pas tant que tous les fichiers les téléchargements sont terminés. Cela permet aux goroutines de télécharger des fichiers en parallèle, améliorant ainsi les performances.
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!