离线安装go需解压官方tar.gz至用户目录(如$home/local/go),显式设置goroot和path,unset gopath,清空goproxy,并依赖有网机器预生成vendor目录及go.mod、go.sum同步拷贝,编译时加-mod=vendor参数。

离线环境不能用 go install 或 go get,也不能走代理拉包,必须提前把所有依赖二进制和源码打包带进去。
离线安装 Go 二进制,关键在 GOROOT 和 PATH 路径是否干净
你拿到的 go1.21.10.linux-amd64.tar.gz 解压后就是一个完整可运行的 Go 工具链,不依赖系统其他库。但离线终端往往没有 root 权限,也容易和旧版 Go 冲突:
- 解压到用户目录(比如
$HOME/local/go),避免写/usr/local - 只改当前用户 shell 配置(
~/.bashrc或~/.zshrc),追加三行:export GOROOT=$HOME/local/goexport PATH=$GOROOT/bin:$PATHunset GOPATH(Go 1.16+ 默认启用 modules,GOPATH反而可能干扰) - 执行
source ~/.bashrc后,立刻验证:go version和go env GOROOT输出必须一致且指向你解压的位置 - 如果
go env显示GOPROXY=direct以外的值,说明之前有人配过代理——离线时它会卡死,用go env -u GOPROXY清掉
go mod vendor 必须在有网机器上跑完再拷贝,否则离线时 go build 会失败
离线终端上执行 go build 时,go 工具默认仍会尝试联网校验 checksum 或检查 module proxy,哪怕你写了 go.mod。唯一可靠方式是把整个 vendor/ 目录带上:
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
- 在有网机器上,进入项目根目录,先确保缓存齐全:
GO111MODULE=on go mod download - 再生成 vendor:
go mod vendor(这步会生成vendor/modules.txt和全部依赖源码) - 检查是否漏间接依赖:
go list -m all | grep 'indirect',输出的模块名必须全部出现在vendor/modules.txt里 - 把整个
vendor/目录连同go.mod、go.sum一起打包,拷到离线机对应路径 - 离线机上编译时加
-mod=vendor参数:go build -mod=vendor -o myapp ./cmd/myapp
离线调试器 dlv 无法 go install,得手动编译或预装二进制
dlv 不是 Go 自带命令,离线时 go install github.com/go-delve/delve/cmd/dlv@latest 必然失败。常见做法是:
- 在有网机器上用目标 Go 版本(如 1.21.10)编译出
dlv:git clone https://github.com/go-delve/delve.gitcd delve && git checkout v1.21.1(版本需与 Go 匹配)GO111MODULE=on go build -o $HOME/local/bin/dlv ./cmd/dlv - 把编译好的
dlv二进制拷到离线机$HOME/local/bin/,并加入PATH - 验证:
dlv version应输出版本号,且dlv --help不报错 - VSCode 或 GoLand 调试前,务必在 IDE 设置中显式指定
dlv路径,别信 “Auto-detect”
离线环境最易被忽略的是 go.sum 校验和文件——它不参与编译,但 go build 默认仍会读取并校验;若你删了它或内容不全,即使 vendor 齐全,也会报 checksum mismatch。所以拷贝时,go.mod、go.sum、vendor/ 三者必须同步,缺一不可。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










