고루틴을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!