>백엔드 개발 >Golang >## Goroutines가 Golang에서 파일 다운로드 속도를 높일 수 있나요?

## Goroutines가 Golang에서 파일 다운로드 속도를 높일 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-10-30 06:09:281035검색

## 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을 사용하여 모든 파일이 끝날 때까지 기본 고루틴이 종료되지 않도록 합니다. 다운로드가 완료되었습니다. 이를 통해 고루틴은 파일을 병렬로 다운로드하여 성능을 향상시킬 수 있습니다.

위 내용은 ## Goroutines가 Golang에서 파일 다운로드 속도를 높일 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.