Maison >développement back-end >Golang >## Les Goroutines peuvent-elles accélérer les téléchargements de fichiers dans Golang ?

## Les Goroutines peuvent-elles accélérer les téléchargements de fichiers dans Golang ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 06:09:281035parcourir

## Can Goroutines Speed Up File Downloads in Golang?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn