fetch-go 是一个用 Go 语言编写的轻量级并发下载器,支持 HTTP/HTTPS 文件下载、断点续传、分块并发下载等功能。
# 克隆仓库
git clone https://github.com/zhiqiangwang/fetch-go.git
cd fetch-go
# 编译
go build -o fetch .
# 基本用法
./fetch -url "https://example.com/file.zip"
# 指定输出文件名
./fetch -url "https://example.com/file.zip" -output "myfile.zip"
# 自定义并发数和分块大小
./fetch -url "https://example.com/file.zip" -concurrency 8 -chunk-size 10485760
| 选项 | 说明 | 默认值 |
|---|---|---|
-url | 下载的 URL 地址 | 必填 |
-output | 输出文件名 | 自动从 URL 提取 |
-concurrency | 并发 worker 数量 | 4 |
-chunk-size | 分块大小(字节) | 5242880 (5 MB) |
┌─────────────────────────────────────────────────────────────┐ │ fetch-go 下载器 │ ├─────────────────────────────────────────────────────────────┤ │ 1. 发送 HEAD 请求探测文件信息(大小、是否支持 Range) │ │ ↓ │ │ 2. 如果服务器不支持 Range,降级为单线程下载 │ │ ↓ │ │ 3. 根据文件大小和分块大小,生成多个下载任务 │ │ ↓ │ │ 4. 启动 Worker Pool 并发执行下载任务 │ │ ↓ │ │ 5. 每个 Worker 发送带 Range 的 HTTP 请求下载对应分块 │ │ ↓ │ │ 6. 将数据写入文件对应位置 │ │ ↓ │ │ 7. 实时更新进度条和断点续传状态 │ └─────────────────────────────────────────────────────────────┘
.resume.json 文件程序输出分为以下级别:
| 级别 | 前缀 | 说明 |
|---|---|---|
| INFO | [INFO] | 重要操作信息(开始/完成下载、文件大小) |
| DEBUG | [DEBUG] | 详细信息(重定向、分块、重试) |
| WARN | [WARN] | 警告(请求失败、重试) |
| ERROR | [ERROR] | 错误(下载失败) |