>  기사  >  백엔드 개발  >  Go에서 메모리를 가득 채우지 않고 대용량 파일을 효율적으로 다운로드하는 방법은 무엇입니까?

Go에서 메모리를 가득 채우지 않고 대용량 파일을 효율적으로 다운로드하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-13 12:58:02341검색

How to Efficiently Download Large Files in Go Without Filling Up Memory?

Go를 사용하여 대용량 파일을 효율적으로 다운로드

대용량 파일을 메모리에 저장하면 컴퓨터 리소스가 과부하될 수 있습니다. Go에서는 이러한 메모리 제약을 피하면서 어떻게 이러한 파일을 직접 다운로드할 수 있습니까?

답변:

다운로드가 HTTP를 통해 이루어진다고 가정:

import (
    "net/http"
    "io"
    "os"
)

func DownloadFile(url, filepath string) (int64, error) {
    // Open the destination file
    out, err := os.Create(filepath)
    if err != nil {
        return 0, err
    }
    defer out.Close()

    // Start the HTTP request
    resp, err := http.Get(url)
    if err != nil {
        return 0, err
    }
    defer resp.Body.Close()

    // Stream the response body into the file (avoiding full buffering)
    n, err := io.Copy(out, resp.Body)
    if err != nil {
        return 0, err
    }

    return n, nil
}

이 접근 방식은 HTTP의 응답 본문을 리더로 활용합니다. io.Copy()와 같은 기능이 이 리더에서 작동하여 응답을 청크로 처리할 수 있습니다.

위 내용은 Go에서 메모리를 가득 채우지 않고 대용량 파일을 효율적으로 다운로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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