总体来说:用 Go 在 CentOS 上打包不算难,而且 Go 在这方面天生有优势。难不难主要取决于你想要的“打包形式”。
下面分情况说明一下:
Go 是静态编译语言,不依赖运行环境(除非用了 cgo)。
# 在 CentOS 上
yum install golang -y
# 编译
go build -o myapp main.go
跑起来:
./myapp
✅ 优点
❌ 缺点
CentOS 7/8 常用 systemd。
/etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
Restart=always
User=appuser
[Service]
ExecStart=/opt/myapp/myapp
[Install]
WantedBy=multi-user.target
systemctl enable myapp
systemctl start myapp
✅ 这已经能满足 90% 生产需求
如果你要在 CentOS 上正规分发,可以打 RPM。
工具:
rpmbuildfpm(推荐,简单)用 fpm 示例:
fpm -s dir -t rpm -n myapp -v 1.0 \
--prefix /opt/myapp myapp
✅ 适合:
❌ 比前两种复杂一些
现在更常见的方式:
FROM centos:7
COPY myapp /usr/local/bin/myapp
CMD ["myapp"]
docker build -t myapp .
✅ 好处
cgo 开启时会依赖 glibc
CGO_ENABLED=0 go build
推荐服务器程序关闭 cgo
CentOS 版本差异
交叉编译 在 Mac / Win 编译 CentOS 程序:
GOOS=linux GOARCH=amd64 go build
Go 打包 CentOS 不难,越“轻量”越简单;越“正规”(RPM / 签名)越麻烦。
如果你愿意,可以告诉我:
我可以直接给你一份可用模板。