应优先用系统包管理器(如Ubuntu的apt)安装Go,自动处理路径与权限;若需新版则下载官方二进制包解压至/usr/local/go并配置PATH;必须设置GOPROXY=https://goproxy.cn,direct,且用systemd而非nohup管理进程。

直接在服务器上装 Go,别碰 GOPATH 和 GOROOT 手动配置——现代 Go(1.16+)默认启用 Go Modules,硬配反而容易出错。
用系统包管理器安装(Ubuntu/Debian 最省事)
多数生产服务器是 Linux,Ubuntu/Debian 用户优先走 apt,它自动处理路径和权限,不需改 /etc/profile:
- 运行
sudo apt update && sudo apt install golang-go - 验证:
go version应输出类似go version go1.22.4 linux/amd64 - 检查
go env GOPROXY,若为空,立即设代理(国内必做):go env -w GOPROXY=https://goproxy.cn,direct
注意:apt 安装的版本可能略旧(比如 Ubuntu 22.04 默认是 1.18),如需新版,改用二进制安装更可控。
手动解压安装(CentOS/RHEL 或需要指定版本时)
CentOS 没官方 go 包,或你明确要 go1.22.5 这种最新小版本,就下载二进制包解压:
立即学习“go语言免费学习笔记(深入)”;
- 去 阿里云镜像站 下载对应架构的
go*.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go*.linux-amd64.tar.gz- 确认
/usr/local/go/bin在$PATH中:检查echo $PATH是否含该路径;若不含,加到/etc/profile.d/go.sh(比改/etc/profile更干净):echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/go.sh - 执行
source /etc/profile.d/go.sh生效
别把 GOROOT 写死——go 自己能识别安装位置;强行设反而在多版本共存时引发冲突。
部署前必须验证的三件事
环境装完不等于能跑服务,这三个点漏一个,上线后会卡在奇怪的地方:
-
go mod tidy能否成功拉取依赖?失败多半是GOPROXY没设或网络不通 -
go build -o server ./cmd/server能否生成可执行文件?注意别在项目根目录外执行,否则go.mod找不到 - 监听端口是否被占用或防火墙拦截?
ss -tlnp | grep :8080查端口,sudo ufw allow 8080开放(Ubuntu)或sudo firewall-cmd --add-port=8080/tcp --permanent(CentOS)
别用 go run main.go 直接上线——它编译+运行耦合,出错时堆栈难定位,且无法优雅退出。
用 systemd 管理进程(不是简单后台运行)
写个 /etc/systemd/system/myapp.service 文件,比 nohup ./server & 可靠得多:
[Unit] Description=My Go Service After=network.target [Service] Type=simple User=www-data WorkingDirectory=/var/www/myapp ExecStart=/var/www/myapp/server Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
然后执行:sudo systemctl daemon-reload && sudo systemctl enable myapp && sudo systemctl start myapp
关键点:没设 User 会导致权限过高;没设 RestartSec 会让崩溃重试过于频繁;日志不打到 journal 就没法用 journalctl -u myapp -f 实时看错误。
最常被跳过的一步:没配 GOPROXY 就直接 go mod download,结果卡住半小时没反应——这不是网络问题,是 Go 默认代理不可达,得手动设。


















