logo
1
0
WeChat Login
📝 docs: 完善 README 文档内容

fetch-go

fetch-go 是一个用 Go 语言编写的轻量级并发下载器,支持 HTTP/HTTPS 文件下载、断点续传、分块并发下载等功能。

功能特点

  • 多线程并发下载:支持自定义并发数,充分利用网络带宽
  • 断点续传:支持中断后继续下载,意外中断不会丢失进度
  • 智能分块:自动将文件分割为多个块并行下载
  • 重试机制:下载失败时自动重试,支持配置重试次数
  • 代理支持:自动继承系统代理设置(支持 HTTP/HTTPS/SOCKS5)
  • 安全跳过验证:支持跳过 TLS 证书验证(用于自签名证书场景)
  • 进度显示:实时显示下载进度和速度统计

安装

# 克隆仓库 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]错误(下载失败)