离线部署go需手动解压、配置goroot和path;gopls与dlv须外网安装后复制;依赖须用go mod vendor预缓存并加-mod=vendor构建。

离线环境必须手动解压并配置 GOROOT 和 PATH
Go 官方二进制包本身不依赖网络,但离线部署时不能靠包管理器自动安装,必须人工完成解压、路径设置和环境变量生效三步。常见错误是只解压没配 PATH,导致终端里执行 go version 报 “command not found”。
- 下载对应系统架构的
go1.24.4.linux-amd64.tar.gz(或 Windows/macOS 版)到可联网机器,再拷贝进内网服务器 - 解压到固定位置,如
/usr/local/go(Linux/macOS)或C:\Go(Windows) - Linux/macOS:在
/etc/profile或$HOME/.bashrc中追加export PATH=$PATH:/usr/local/go/bin,然后运行source /etc/profile - Windows:把
C:\Go\bin加入系统环境变量PATH,重启 CMD 或 PowerShell
go env 显示 GOPATH 为空也不影响使用
Go 1.16+ 默认启用模块模式(GO111MODULE=on),项目可放在任意目录,无需强制放 GOPATH/src 下。离线环境下更不必创建 $HOME/go/{src,pkg,bin} 这套旧式结构——它已过时,强行建了反而可能干扰 go mod 行为。
- 验证方式:执行
go env GOPATH,输出为空或仅提示“not set”属正常 - 只要
go version和go env GOROOT正确,就能用go mod init初始化新项目 - 若旧脚本硬依赖
GOPATH,可在离线机上临时设一个:export GOPATH=$HOME/go(不需创建子目录)
离线安装 gopls 和调试器必须分两步:外网打包 + 内网安装
gopls(VSCode 的 Go 语言服务器)和 dlv(Delve 调试器)无法在线 go install,因为它们依赖大量第三方模块。直接在内网执行会卡在 “Fetching …” 或报 cannot find package 错误。
- 在外网机器执行:
go install golang.org/x/tools/gopls@latest和go install github.com/go-delve/delve/cmd/dlv@latest - 完成后,去外网机的
$GOPATH/bin(或$HOME/go/bin)找到生成的gopls和dlv可执行文件 - 把这两个文件直接复制到内网机的
/usr/local/go/bin/(Linux)或C:\Go\bin\(Windows),确保有执行权限 - VSCode 中关闭自动安装提示,在设置里指定
"go.goplsPath"和"go.dlvPath"指向本地路径
离线项目依赖必须提前缓存 go.mod 和 vendor
没有代理(GOPROXY)时,go build 会尝试直连 GitHub/GitLab 等源,必然失败。不能靠 go mod download 现场拉取,必须在外网预处理。
- 在外网项目根目录执行:
go mod vendor,生成vendor/目录,包含所有依赖源码 - 把整个项目(含
go.mod、go.sum、vendor/)打包传入内网 - 内网构建时加
-mod=vendor参数:go build -mod=vendor -o app ./cmd/main - 若项目用私有 Git 仓库,还需在外网配置好
git config --global url."https://xxx.com/".insteadOf "git@xxx.com:",再跑go mod vendor
go 命令本身能跑,不代表 gopls、dlv、go test 里的网络校验、甚至 go generate 脚本也能离线工作——每个工具链环节都得单独验证。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











