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
Libérer: 2024-10-30 06:09:28
original
1061 Les gens l'ont consulté

## 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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal