下面给你一套在 CentOS 上配置 Go(Golang)的最佳实践,兼顾稳定性、可维护性和生产可用性,适合开发机和服务器。
不要用 yum install golang(版本通常很旧)
# 示例:Go 1.22
cd /usr/local
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
目录结构:
/usr/local/go
/etc/profile.d/go.sh
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
source /etc/profile
~/.bashrc 或 ~/.zshrc
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
export GO111MODULE=on
export GOPROXY=https://proxy.golang.org,direct
✅ 国内建议:
export GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=sum.golang.org
检查:
go env
~/go
├── bin
├── pkg
└── src
project/
├── cmd/
│ └── app/
│ └── main.go
├── internal/
├── pkg/
├── configs/
├── go.mod
└── go.sum
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
getenforce
如为 Enforcing 且 Go 程序异常:
setenforce 0 # 临时
或修改策略(推荐长期)
/etc/systemd/system/myapp.service
[Unit]
Description=Go App
After=network.target
[Service]
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable myapp
systemctl start myapp
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
go build -o myapp cmd/app/main.go
✅ 优点:
| 问题 | 解决 |
|---|---|
| yum 安装 go 太旧 | 用官方包 |
| 代理慢 | goproxy.cn |
| SELinux 阻止 | 调整策略 |
| 端口不通 | firewall-cmd |
| 多用户冲突 | GOROOT 全局,GOPATH 用户级 |
GOROOT=/usr/local/go
GOPATH=$HOME/go
GO111MODULE=on
GOPROXY=https://goproxy.cn,direct
如果你愿意,我可以:
你现在是 开发环境还是生产服务器?