离线时go mod download直接失败,因其默认强制联网:先解析proxy.golang.org,再fallback至模块源站,DNS失败或超时即报错;必须同时设置GOPROXY=direct、GOSUMDB=off,并正确配置GOINSECURE/GOPRIVATE覆盖私有路径,否则工具链绝不访问本地缓存。

离线时 go mod download 为什么直接失败
因为 go mod download 默认强制走网络:先查 proxy.golang.org,再 fallback 到模块源站(如 GitHub),DNS 解析失败或连接超时就会报 no such host 或 timeout。离线机上没配代理、没设跳过校验,工具链根本不会尝试本地路径。
关键不是“让它连不上也继续”,而是让 Go 工具链从一开始就不发任何网络请求——这需要三件事同时到位:
-
GOPROXY=direct:禁用所有代理,不查proxy.golang.org -
GOSUMDB=off:跳过 checksum 校验服务器,避免sum.golang.org连接 -
GOINSECURE或GOPRIVATE必须覆盖私有模块路径(如git.internal.company.com),否则仍会尝试走 HTTPS 校验
私有模块路径必须与 Git 地址严格对齐
Go 不支持“路径别名”。你在 go.mod 里写 module git.internal.company.com/mylib,那实际 Git 仓库地址就必须是 https://git.internal.company.com/mylib.git(或 SSH:git@git.internal.company.com:mylib.git)。否则 go mod tidy 在联网机器上都拉不到,更别说离线了。
常见错配场景:
立即学习“go语言免费学习笔记(深入)”;
- Git 仓库 URL 是
https://git.internal.company.com/group/mylib,但go.mod写成module mylib→ 报unknown revision - 用了自定义域名(如
mylib.local),但离线机 hosts 里没配解析,也没设GOINSECURE=mylib.local→ DNS 失败 - SSH 方式没配置
~/.gitconfig的insteadOf规则,go默认仍走 HTTPS 协议 → 认证 404
离线依赖打包必须包含 replace 模块和 cgo 系统库
go mod vendor 默认忽略 replace 声明的本地路径(如 replace github.com/foo/bar => ../bar),也不会打包 C 头文件和静态库。结果就是 vendor 后编译报 cannot find package 或 cannot find -lc。
实操要分两步做:
- 对
replace模块:先在联网机用go mod edit -replace=old=new改成可下载的远端地址(如git.internal.company.com/bar),再go mod download;或者手动cp -r ../bar vendor/github.com/foo/bar,并确保vendor/modules.txt里有对应条目 - 对 cgo 依赖(如
net、os/user、sqlite3):离线机必须提前装好gcc、pkg-config、libc6-dev(Debian/Ubuntu)或glibc-devel(CentOS/RHEL),否则go build直接卡在链接阶段
离线构建命令必须显式加 -mod=vendor
vendor/ 目录只是源码快照,Go 工具链默认不读它。不加参数就 go build,还是会去查 go.sum、尝试联网验证,甚至触发 go list 的 module lookup。
真正离线构建只有一条命令模式:
go build -mod=vendor -ldflags="-s -w"- CI 或测试也要同步加:
go test -mod=vendor ./...、go install -mod=vendor ./cmd/... - IDE(如 VS Code + gopls)需额外配置:
"go.toolsEnvVars": {"GOFLAGS": "-mod=vendor"},否则编辑器提示“no packages found”
最容易被忽略的是:即使 vendor/ 存在且完整,只要漏掉 -mod=vendor,整个流程就不是离线的——它可能静默成功,但背后已发起 DNS 查询或 HTTPS 连接。真离线必须抓包验证:tcpdump -i any port 53 or port 443,全程零包才是可信的。


















