无网服务器安装go必须提前在有网机下载匹配架构的二进制包(如x86_64选linux-amd64)、解压至/usr/local/go、配置/etc/profile.d/golang.sh环境变量,并预拉取依赖设goproxy=direct与gosumdb=off,构建时用-mod=vendor且禁用cgo或确保系统库齐全。

不能直接在无网络服务器上“装 Go”——必须提前在有网机器上完成全部依赖打包,否则 go mod download 会卡死或报 proxy.golang.org: no such host。
确认目标服务器架构并下载匹配的 Go 二进制包
无网服务器上连 go version 都执行不了,往往是因为二进制格式不匹配。先在目标机上运行:
uname -m
输出 x86_64 → 下载 go1.22.5.linux-amd64.tar.gz;输出 aarch64 或 arm64 → 必须选 go1.22.5.linux-arm64.tar.gz。错一个字就会报 cannot execute binary file: Exec format error。
- 去 https://www.php.cn/link/81836b7cd16991abb7febfd7832927fd 手动下载,别用
wget直接抓(可能跳转到镜像页导致链接失效) - 解压路径固定为
/usr/local/go,这是 Go 工具链内部默认探测路径,改了容易出问题 - 验证:解压后执行
/usr/local/go/bin/go version,能输出版本即说明二进制可用
环境变量必须写入 /etc/profile.d/ 而非仅 ~/.bashrc
无网服务器常用于部署或 CI 场景,很多工具(如 systemd service、Jenkins agent、cron)启动的是非登录 shell,读不到 ~/.bashrc。只改用户级配置会导致 go 命令在子进程中不可用。
- 创建
/etc/profile.d/golang.sh,内容严格如下(路径不能错):
export GOROOT=/usr/local/go export PATH=$GOROOT/bin:$PATH export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
- 执行
source /etc/profile.d/golang.sh后,新开终端再运行go env GOROOT,输出必须是/usr/local/go - 若
go install报权限错误,说明$GOPATH/bin不在PATH里,或$GOPATH目录属主不是当前用户
离线构建必须预拉取所有模块并禁用校验
即使 go 命令能跑,go build 仍可能失败,典型现象是卡在 verifying github.com/sirupsen/logrus@v1.9.3 或报 checksum mismatch。这不是网络超时,而是 Go 默认仍尝试连接 sum.golang.org。
- 在有网机器上,用**完全相同的 Go 版本**执行:
go mod download -x golang.org/x/net golang.org/x/sys go mod tidy go mod vendor
- 把整个
$GOPATH/pkg/mod目录打包带走(保留结构),同时拷贝项目根目录下的vendor/文件夹 - 在无网机上设环境变量:
go env -w GOPROXY=direct GOSUMDB=off(注意:必须用-w写入,临时 export 不生效) - 构建时加
-mod=vendor强制走本地 vendor:go build -mod=vendor -o myapp ./cmd/myapp
cgo 依赖和系统库容易被忽略
很多 Go 包(如 net、os/user、database/sql)底层调用 libc,禁用 cgo(CGO_ENABLED=0)虽可绕过,但 DNS 解析等行为会退化;启用 cgo 则要求无网机已安装对应头文件和静态库。
- 检查是否含 cgo:
go list -f '{{.CgoFiles}}' ./...,输出非空即需 cgo 支持 - 无网机必须提前装好:
gcc、libc6-dev(Debian/Ubuntu)或glibc-devel(CentOS/RHEL) - 若用 sqlite3 等驱动,需提前编译好静态链接版,再用
go mod edit -replace指向本地路径 - 最稳妥验证方式:在无网机上开
tcpdump -i any port 53 or port 443,然后跑完整go build流程——零连接才叫真离线
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











