在 CentOS 上配置 Golang(Go 语言环境)时,确实有一些常见的“坑”,尤其是新装系统、或者从 CentOS 7 迁移到 CentOS 8/Stream 时。下面按安装 → 环境 → 编译 → 运行的顺序总结。
yum install golangyum install golang
坑点:
✅ 推荐做法: 从官方下载:
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
GOROOT 和 PATH 配错很多人这样写:
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
⚠ 坑点:
bash~/.bashrc 但用 sudo 或 cron 运行时不生效✅ 正确示例(普通用户)
# ~/.bashrc
export PATH=$PATH:/usr/local/go/bin
✅ 验证
source ~/.bashrc
go version
sudo go version
# command not found
✅ 解决:
老教程:
export GOPATH=$HOME/go
现代 Go(1.16+)默认 Go Modules
✅ 推荐:
go env -w GO111MODULE=on
go env -w GOPROXY=https://proxy.golang.org,direct
国内机器:
go env -w GOPROXY=https://goproxy.cn,direct
$GOPATH/src 外不能 go build旧项目报错:
cannot find package
✅ 解决:
~/go/src/xxxGo 程序本身没问题,但:
⚠ 报错示例:
version `GLIBC_2.28' not found
✅ 建议:
CGO_ENABLED=0CGO_ENABLED=0 go build
CentOS 8 官方源没了:
Failed to download metadata
✅ 解决:
go run main.go
# 本地能访问,外网不行
✅ 检查:
firewall-cmd --list-ports
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
并确认监听:
0.0.0.0:8080 # 而不是 127.0.0.1
错误:
exec: "go": executable file not found
✅ systemd 不会读 .bashrc
解决:
ExecStart=/usr/local/go/bin/go run /opt/app/main.go
| 坑 | 原因 | 解决 |
|---|---|---|
| yum 装旧 Go | 仓库老 | 官方 tar 包 |
| go not found | PATH 没配 | .bashrc |
| 外网访问不了 | 防火墙 | firewalld |
| GLIBC 错 | CentOS 7 老 | CGO=0 |
| module 拉不到 | 代理问题 | goproxy.cn |
| systemd 起不来 | 环境不全 | 用二进制 |
如果你愿意,可以告诉我:
我可以给你一套最合适的配置方案。