离线构建需设goproxy=direct、gosumdb=off、go111module=on,并用go build -mod=vendor;vendor目录需匹配go.sum,且必须还原goroot、$home/go/pkg/mod、$home/go/bin三路径。

离线机房里 go build 报 cannot find module 怎么办
不是 Go 没装好,是模块查找链断了。Go 默认会尝试联网解析 go.mod 里的依赖路径,哪怕 go.sum 和 vendor/ 都在,只要没配对关闭校验和、禁用代理,就会卡在 DNS 解析或 TCP 连接阶段。
- 必须设
GOPROXY=direct:否则go build仍会尝试连proxy.golang.org,报dial tcp: i/o timeout - 必须设
GOSUMDB=off:否则即使有go.sum,也会因无法访问sum.golang.org而失败 - 必须设
GO111MODULE=on:避免退化到 GOPATH 模式,导致依赖路径解析逻辑错乱 - 验证方式:执行
go env GOPROXY GOSUMDB GO111MODULE,三者输出应分别为direct、off、on
vendor/ 目录存在但编译仍失败的常见原因
vendor/ 不是开关,是快照;不加参数它就等于不存在。很多人把 vendor/ 当成“离线保险”,结果 go build 照样报错,就是因为漏了关键参数。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
- 编译命令必须显式加
-mod=vendor:即go build -mod=vendor,否则 Go 工具链完全忽略vendor/ -
go.sum必须与vendor/严格匹配:删过或手动改过vendor/里的文件,go build -mod=vendor会直接报checksum mismatch -
replace指向本地路径的模块不会进vendor/:例如replace example.com/a => ../a,需手动复制或改用go mod edit -replace=example.com/a=./local/a再go mod vendor - IDE(如 VS Code)默认不传
-mod=vendor:需在设置里加"go.toolsEnvVars": {"GOFLAGS": "-mod=vendor"}
哪些目录必须从备份还原才能复用旧缓存
离线恢复 ≠ 重装,而是复用可信状态。只还原三类物理路径,其余全可重写配置。
-
/usr/local/go(或你实际的GOROOT):含编译器、标准库对象文件;缺它go version都失败 -
$HOME/go/pkg/mod:模块缓存目录;还原后go build不再触发网络拉取,避免私有模块地址不可达 -
$HOME/go/bin:已go install的工具(如gopls、dlv);还原后 IDE 插件立即可用 - 别还原
$HOME/go/src:那是你的项目代码,应由 Git 管理,不属于环境范畴
PATH 和 GOROOT 错位导致 go install 写错位置
解压完 go1.24.5.linux-amd64.tar.gz 后,go install 却把二进制写进 /root/go/bin 而非 $HOME/go/bin,说明 GOROOT 和 PATH 没对齐,或者 go 命令本身来自旧安装。
- 先运行
which go,确认输出是/usr/local/go/bin/go而非/usr/bin/go - 再运行
go env GOROOT,输出必须与which go的父目录一致(即/usr/local/go) - 如果
go env GOROOT为空,运行go env -w GOROOT=/usr/local/go显式声明 -
go install的目标目录由GOBIN决定,未设时 fallback 到$GOPATH/bin;确保$HOME/go/bin存在且在PATH中
go build 是否真正绕过了所有网络路径”。哪怕只漏一个 GOSUMDB=off,整个链路就卡死在第一行日志里。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










