Чтобы сделать это, вы должны изучить часть 14.16 - Content-Range
- в RFC
document describing the HTTP/1.1
protocol, а затем применить эти знания, чтобы манипулировать набор HTTP-заголовков, когда посланный запрос клиента выполняется - см documentation и примеры там.
Чтобы рассчитать диапазон запроса, чтобы продолжить скачивание, вы должны получить размер текущего файла. Это можно найти в результатах, возвращаемых функцией Stat()
, которую можно вызвать по открытому файлу - *os.File
, возвращенный вызовом os.Open()
.
Вам следует открыть файл в режиме добавления, а затем использовать что-то вроде io.Copy()
для потоковой передачи данных из файла ответа HTTP-ответа Body
в файл-объект.
Проведите собственное исследование того, как читать данные из ответов HTTP в Go - они изобилуют в Интернете.
Текущий ответ полезен, если вы знаете, что собираетесь использовать только http для загрузки. Если вы хотите поддерживать более широкий диапазон протоколов, я бы предложил вам найти привязку к libcurl - или что-то подобное. – Cubic
Идет с libcurl на самом деле хороший подход. Фактически я нашел пакет https://github.com/go-av/curl, который делает довольно аккуратный материал, написанный на Go-Lang, и содержит почти то, что мне нужно, с момента извлечения файла. – Degreane
[getparty] (https://github.com/vbauerster/getparty) - может быть то, что вы ищете. Он написан в Go, используя пакет «het/http», и может разделять файл загрузки. Возобновление также поддерживается. –