Rumah >pembangunan bahagian belakang >Golang >## Bolehkah Goroutines Mempercepatkan Muat Turun Fail di Golang?

## Bolehkah Goroutines Mempercepatkan Muat Turun Fail di Golang?

Barbara Streisand
Barbara Streisandasal
2024-10-30 06:09:281035semak imbas

## Can Goroutines Speed Up File Downloads in Golang?

Selarikan Muat Turun Fail di Golang Menggunakan Goroutines

Soalan:

Bolehkah kita memanfaatkan goroutin untuk muat turun berbilang fail serentak?

Konteks Kod:

<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>

Kod yang diubah suai ini menggunakan penyegerakan.WaitGroup untuk memastikan goroutine utama tidak terkeluar sehingga semua fail muat turun selesai. Ini membolehkan goroutine memuat turun fail secara selari, meningkatkan prestasi.

Atas ialah kandungan terperinci ## Bolehkah Goroutines Mempercepatkan Muat Turun Fail di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn