离线安装 fiber 的唯一可行方式是提前在有网机器上拉取并打包依赖,再复制到目标环境;go get 必须联网解析模块路径、校验 checksum、下载 zip 包,任一环节断网即失败。

离线安装 Fiber 的唯一可行方式是提前在有网机器上拉取并打包依赖,再复制到目标环境 —— 没有“无网直接安装”这回事,go get 必须联网解析模块路径、校验 checksum、下载 zip 包。
为什么 go get 在无网时一定失败
Go 的模块机制(module mode)默认启用,go get github.com/gofiber/fiber/v2 不是简单下载一个仓库,而是:
- 向
proxy.golang.org查询模块元数据和版本列表 - 从
sum.golang.org校验每个依赖的哈希值 - 最终从 GitHub / Go Proxy 缓存下载
.zip归档包
三者任一环节断网,命令就会卡住或报错:proxy.golang.org: no such host 或 failed to fetch。
离线安装的实操步骤(两台机器协作)
假设 A 机有网,B 机完全离线(如生产内网、工控设备):
- 在 A 机执行:
go mod init offline-demo && go get github.com/gofiber/fiber/v2@v2.52.0(指定明确版本,避免隐式升级) - 运行
go mod vendor,生成vendor/目录,含全部源码和依赖 - 把整个项目目录(含
go.mod、go.sum、vendor/)压缩打包,拷贝到 B 机 - 在 B 机解压后,加环境变量启用 vendor 模式:
GO111MODULE=on GOPROXY=off GOSUMDB=off go build
关键点:GOPROXY=off 禁用代理,GOSUMDB=off 跳过校验(因无网无法连 sum.golang.org),go build 会自动从 vendor/ 读代码。
容易被忽略的坑:v2 和 v3 的 vendor 兼容性
Fiber v3(要求 Go 1.24+)与 v2 的模块路径、内部 API 完全不兼容:
- 若 A 机用 Go 1.23 执行
go get github.com/gofiber/fiber/v3,会静默降级为 v2,vendor/里实际是 v2 代码 - B 机若用 Go 1.24 编译,却引用了 v2 的
vendor/,编译报错:cannot use fiber.Ctx as fiber.Ctx(接口定义冲突) - 必须确保 A/B 机 Go 版本一致,且
go get命令中显式写死版本,例如:go get github.com/gofiber/fiber/v2@v2.52.0
替代方案:用 git clone + replace(适合长期离线维护)
如果 B 机允许 USB 拷贝 Git 仓库,可更可控:
- 在 A 机:
git clone -b v2.52.0 https://github.com/gofiber/fiber.git,压缩整个目录 - 在 B 机项目根目录的
go.mod中添加:replace github.com/gofiber/fiber/v2 => ./fiber - 运行
go mod tidy(此时不联网,replace会让 Go 直接用本地路径)
注意:replace 后的路径必须是相对路径,且 ./fiber 下必须包含 go.mod(即 clone 的是完整仓库,不是 zip 包)。
真正麻烦的不是“怎么装”,而是离线环境下没人帮你自动发现 fasthttp、go-colorable 这些间接依赖是否漏掉 —— vendor 是唯一能兜底的方式,别省那一步。











