## Goroutines は Golang でのファイルのダウンロードを高速化できますか?

Barbara Streisand
リリース: 2024-10-30 06:09:28
オリジナル
963 人が閲覧しました

## Can Goroutines Speed Up File Downloads in Golang?

ゴルーチンを使用して Golang でファイルのダウンロードを並列化する

質問:

ゴルーチンを利用して次のことを行うことはできますか?複数のファイルを同時にダウンロードしますか?

コード コンテキスト:

<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>
ログイン後にコピー

この変更されたコードは sync.WaitGroup を使用して、すべてのファイルがダウンロードされるまでメインの goroutine が終了しないようにします。ダウンロードが完了しました。これにより、ゴルーチンがファイルを並行してダウンロードできるようになり、パフォーマンスが向上します。

以上が## Goroutines は Golang でのファイルのダウンロードを高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!