结论:别用 yum install golang 装系统自带的 Go,版本太旧、不带 go mod、无法更新,几乎没法用于现代 Go 项目;应手动下载官方二进制包解压至 /usr/local/go 并配置 PATH,GOROOT 无需手动设置,go mod 默认启用,项目可置于任意路径。
直接说结论:别用 yum install golang 装系统自带的 Go,版本太旧、不带 go mod、无法更新,几乎没法用于现代 Go 项目。
为什么不能用包管理器装 Go(如 yum 或 apt)
CentOS/RHEL 的 yum install golang 默认装的是 go1.10 甚至更老的版本;Ubuntu 的 apt install golang 也常卡在 go1.18 前。这些版本:
- 默认关闭
GO111MODULE,go mod不生效,依赖管理会失败 - 缺少新语法支持(比如泛型、
try语句等) -
go env -w不可用,无法持久化配置 - 升级只能重装,不能
go install自己升级
正确安装方式:手动解压 + 配置 PATH(推荐到 /usr/local/go)
这是最稳定、可控、与官方文档一致的方式:
- 从 golang.google.cn 或阿里云镜像(如
https://mirrors.aliyun.com/golang/)下载最新.tar.gz包,例如:go1.22.3.linux-amd64.tar.gz - 用
sudo tar -C /usr/local -xzf go*.tar.gz解压(确保目标是/usr/local/go) - 编辑
~/.bashrc或~/.zshrc,只加这一行:export PATH=$PATH:/usr/local/go/bin - 运行
source ~/.bashrc,再执行go version验证
注意:GOROOT 不需要手动设——只要 go 在 PATH 里,它会自动推导出 GOROOT;设错反而会导致 go build 找不到标准库。
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
go mod 初始化和 GOPATH 的真实角色
Go 1.16+ 默认启用模块模式,GOPATH 已退居二线:
- 新建项目时,进空目录执行
go mod init example.com/hello即可启用模块,无需提前设GOPATH -
GOPATH现在只影响go install安装二进制的位置(即$GOPATH/bin),以及go get下载的旧式包缓存路径($GOPATH/pkg/mod已被GOMODCACHE取代) - 如果你不运行
go install,完全可以不设GOPATH;设了也建议只设为$HOME/go,避免权限问题 - 验证模块是否启用:
go env GO111MODULE应输出on;若为auto或off,执行go env -w GO111MODULE=on
常见错误现象及修复
遇到这些提示,基本就是环境变量或模块配置没对:
-
command not found: go→ 检查echo $PATH是否含/usr/local/go/bin,确认source执行成功 -
go: go.mod file not found in current directory or any parent→ 当前目录没go mod init,不是GOPATH问题 -
build constraints exclude all Go files→ 文件名不是.go后缀,或放在了$GOPATH/src下但没按包路径组织(现代项目完全不用管这个) -
cannot find package "xxx"→ 模块未go get或go mod tidy,不是GOPATH缺失导致的
真正容易被忽略的点只有一个:你不需要把项目放到 $GOPATH/src 下,也不需要按 github.com/user/repo 路径建目录——go mod 之后,项目可以放在任意位置,go run . 照样工作。
