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