Gopeed 多协议下载器完整指南:一条命令下载、自托管并接入 AI
2026/9/15 10:48:32 网站建设 项目流程

Gopeed 多协议下载器完整指南:一条命令下载、自托管并接入 AI

【免费下载链接】gopeedA fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter.项目地址: https://gitcode.com/GitHub_Trending/go/gopeed

如果你受够了"浏览器下的慢、BT 下的乱、服务器上没人管",Gopeed(Go Speed,够快下载器)是一个值得放进工具栏的开源下载器:它用 Go 写核心、Flutter 写界面,一个程序同时管 HTTP、HTTPS、磁力链接和 ed2k 四类下载,还能挂到服务器上、甚至让 AI 帮你管任务。项目遵循 GPL-3.0 协议开源,本文按"日常使用 → 放到服务器 → 接入自动化 → 自己构建"四步展开,帮你把它的每个能力落到具体操作里。

版本提示:Gopeed 2.0 目前处于公开 Beta 阶段,引入了全新界面与通过 FFI 直连 Go 核心的原生通信架构。已安装 Beta 的用户可直接升级到正式版,稳定版用户不会被自动切换渠道。

它替你解决了什么问题

传统下载工具往往只擅长一件事:浏览器插件快但管不了 P2P,BT 客户端强但界面重,命令行灵活却只能本机跑。Gopeed 的解法是把四种协议放进同一个任务模型里,让你用一套界面、一套接口管理所有下载。

对使用者,它意味着:HTTP 大文件用多连接分段并发(把文件切成多段、开多条连接同时拉,把带宽吃满);磁力链接这种"只有一串哈希、先广播再找邻居"的 P2P 协议也内置了 DHT 节点发现、uTP 传输和 Web Seed;ed2k 走 eDonkey 网络。任务支持暂停、续传、重试、按状态筛选和启动恢复,下载完还能自动解压压缩包。对运维者,它意味着一个带认证的 Web UI 加 REST API 加 Webhook;对 AI 玩家,它开放了 MCP 接口(Model Context Protocol,可以理解为"给大模型装手的标准协议"),让 Agent 用自然语言直接操作下载。

一条命令跑起来:CLI 与最小示例

最快的上手方式是把 Gopeed 当命令行工具用,前提是装了 Go 环境:

go install github.com/GopeedLab/gopeed/cmd/gopeed@latest

之后任何下载地址直接喂给它即可,参数定义在 cmd/gopeed/flags.go:

gopeed https://example.com/file.zip gopeed bt.torrent gopeed magnet:?xt=urn:btih:... gopeed -C 32 -D /data/downloads https://example.com/file.zip
参数默认值作用
-C16HTTP 并发连接数
-D当前目录文件保存目录
位置参数URL、.torrent文件或磁力链接

运行后终端会实时渲染/进度条,完成时打印保存路径,失败时打印原因。想在代码里集成下载能力,_examples/basic/main.go 是一个不到 40 行的最小示例:download.Boot().URL(...).Listener(...).Create(...)创建任务,监听EventKeyFinally事件拿结果,选项里通过http.OptsExtra{Connections: 8}控制并发连接数。

一个下载请求在系统里如何流动

把视角切到源码,一条请求的旅程大致是:入口(桌面 FFI、Web API 或 CLI)调用downloader.Create,任务进入 pkg/download/ 的任务管理器;管理器按 URL 前缀(http/magnet/ed2k 等)从注册表挑出对应的 Fetcher 实现,协议代码在 internal/protocol/ 下按目录分家(httpbted2k)。所有协议实现同一套接口,定义在 internal/fetcher/fetcher.go:Resolve先解析出文件名、大小、文件列表,Start开始传输,Pause/Close控制生命周期,StatsProgress上报数据。任务管理器不关心协议细节,只把 Fetcher 当作黑盒驱动,这就是"同一界面管四种协议"的底气。

几个值得留意的数据结构:Request(含 URL、标签、代理、跳过证书校验)与Resource(解析结果,含是否支持 Range 断点、文件列表、哈希)都在 pkg/base/model.go;任务状态枚举(readyrunningpausewaiterrordone)在 pkg/base/constants.go。HTTP 侧支持 Range 分段、自定义 Header 与 User-Agent、代理;BT 基于github.com/anacrolix/torrent库,支持 DHT、uTP、Web Seed、Tracker 管理和按分享率/时间控制做种,配置项见 internal/protocol/bt/config.go;ed2k 基于github.com/monkeyWie/goed2k。前端则完全独立:桌面端通过 cgo 把 Go 核心编译成动态库(libgopeed.dll/.dylib/.so),bind/desktop/main.go 导出StartStopInvokeSubscribeTaskEventsFreeCString等 C 函数,Flutter 用dart:ffi直接调用,不走套壳 WebView;移动端则用gomobile bind打包成 AAR 与 XCFramework,入口在 bind/mobile/main.go。

一条命令把下载服务挂到服务器上 🖥️

自托管由 cmd/web 提供:把 Flutter 构建产物通过//go:embed dist/*打进二进制,一个可执行文件就是完整服务,数据用 bbolt 存储。配置有三个来源:命令行参数、配置文件(默认./config.json)、GOPEED_前缀环境变量,优先级为命令行非默认值 > 配置文件 > 环境变量,加载逻辑见 cmd/web/flags.go。

日常你真正要改的只有这几项:

参数默认值说明
-A/--address0.0.0.0绑定地址
-P/--port9999绑定端口
-u/--usernamegopeedWeb 认证用户名
-p/--password不设置则不开启认证
-T/--api-token开启认证后调用 REST API 必须携带
-d/--storage-dir可执行文件目录下 storage存储目录
--white-download-dirs允许的下载目录白名单,逗号分隔
--mcp-enablefalse是否开启 MCP 端点(见下节)

最典型的启动组合:

gopeed --address 0.0.0.0 --port 9999 \ --username admin --password your-password \ --api-token your-token \ --mcp-enable \ --storage-dir /data/gopeed/storage

容器化部署直接跑仓库自带的 Dockerfile:构建阶段用golang:1.25.4-alpine3.22CGO_ENABLED=0 go build -tags nosqlite,web编译,运行阶段是alpine:3.23,暴露 9999 端口、存储卷挂/app/storage;entrypoint.sh 通过PUIDPGIDUMASK环境变量控制容器内运行身份与文件权限,外部参数透传给./gopeed。除 REST API(路由在 pkg/api/routes.go,服务端在 pkg/rest/)外,还有 Webhook 与下载后脚本两个钩子,分别在 pkg/download/webhook.go 和 pkg/download/script.go,配合自托管实例就能做"下完自动通知/自动处理"。

接入 AI Agent:MCP 接口与自动化

MCP 是 Gopeed 2.0 的新能力:服务端基于github.com/modelcontextprotocol/go-sdk,以无状态 Streamable HTTP 方式暴露,工具注册和输入校验都在 pkg/mcpserver/server.go。启用方式很简单——自托管命令里加上--mcp-enable,或设环境变量GOPEED_MCPENABLE=true

接入 AI Agent 后,你对着它说"帮我下载最新的 Gopeed Windows 客户端",Agent 会按下面的工具表自己选路:

工具干什么
resolve_task先解析 URL/URI,返回资源信息和文件列表,适合下载前"预览选文件"
create_task用资源 ID(rid)或直传请求(req)创建并启动任务
list_tasks按 ID、状态、排除状态筛选任务列表
get_task取单个任务的完整信息:请求、资源、选项、进度
get_task_status轻量版:运行状态 + 各文件进度
get_task_stats协议统计:HTTP 看连接数,BT 看 Peer 与做种数据
pause_task/continue_task暂停 / 恢复任务
delete_task删除任务,force=true时连已下载文件一起删

两个细节体现工程用心:一是create_task的两条路径在源码里分得很清楚,riddownloader.Createreqdownloader.CreateDirect;二是协议相关参数(HTTP 的连接数、自动解压、压缩包密码;BT 的 trackers)用 oneOf 联合 Schema 区分,避免 MCP 客户端把结构误读成字符串。

再往外走:JS 扩展与浏览器接管

下载源不够用?Gopeed 内置 JavaScript 扩展引擎,基于 goja 在 Go 进程里直接跑扩展脚本,实现见 pkg/download/extension_engine.go,配套的事件总线在 internal/controller/。仓库里 pkg/download/testdata/extensions/ 下有一组官方测试扩展(基础脚本、Blob 下载、存储、设置项、报错处理等),照着manifest.json+index.js的结构就能写出"从视频网站抓取直链"之类的扩展。另外 UI 侧还实现了浏览器扩展宿主(ui/flutter/lib/util/browser_extension_host/),让 Chrome、Edge、Firefox 等浏览器把下载直接接管给 Gopeed。

自己构建三端:桌面、移动、Web 🔧

构建环境要求:Go 1.25 以上(当前 go.mod 声明go 1.25.4)、Flutter 3.41 以上,桌面和移动端均需 cgo 环境。克隆命令:git clone https://gitcode.com/GitHub_Trending/go/gopeed

桌面端的关键是先把 Go 核心编成动态库(nosqlite标签用于去掉 sqlite 依赖),再交给 Flutter 打包,以 Windows 为例:

go build -tags nosqlite -ldflags="-w -s" -buildmode=c-shared \ -o ui/flutter/windows/libgopeed.dll github.com/GopeedLab/gopeed/bind/desktop cd ui/flutter && flutter build windows

macOS 产物放到ui/flutter/macos/Frameworks/libgopeed.dylib,Linux 放到ui/flutter/linux/bundle/lib/libgopeed.so,其余同理。移动端先装gomobilego install golang.org/x/mobile/cmd/gomobile@latest && gomobile init),Android 用gomobile bind -tags nosqlite ... -o ui/flutter/android/app/libs/libgopeed.aar生成 AAR 再flutter build apk;iOS 生成 XCFramework 后flutter build ios --no-codesign

Web 端最省事,两条链路:先flutter build web,把ui/flutter/build/web拷到cmd/web/dist,再go build -tags nosqlite,web -o bin/ github.com/GopeedLab/gopeed/cmd/web。仓库 Dockerfile 走的就是这条链路,并额外用-X注入版本号与InDocker标识。

收个尾

把 Gopeed 放进你的工作流其实只有三条路:个人用,go install一条命令拿到 CLI,或去官网、Releases 下桌面端;团队用,自托管一个带认证和目录白名单的 Web 服务,配好 Webhook 与脚本钩子;进阶用,开一个--mcp-enable,让 AI Agent 成为下载管家。源码侧的读法也顺势清晰:pkg/是对外契约,internal/是协议与调度实现,bind/是各端入口,ui/flutter/是全部界面。想深入哪一层,从这几个目录切进去即可。

【免费下载链接】gopeedA fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter.项目地址: https://gitcode.com/GitHub_Trending/go/gopeed

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询