在 Ubuntu(Linux) 环境下用 Go(Golang) 打包/构建程序,有几个常见坑和注意点,下面按「重要程度」给你总结:
如果你在 macOS / Windows 上打包给 Ubuntu 用:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app
常见平台:
GOOS=linuxGOARCH=amd64 / arm64⚠️ 注意:
CGO_ENABLED=0 go build
✅ 不依赖系统库
✅ 可在 Ubuntu / Alpine 直接运行
CGO_ENABLED=1 go build
⚠️ 会依赖:
Ubuntu 需要:
sudo apt install gcc
✅ 建议:
FROM ubuntu:22.04
WORKDIR /app
COPY app /app/app
RUN chmod +x /app/app
CMD ["/app/app"]
构建:
docker build -t myapp .
Ubuntu 必须有执行权限:
chmod +x app
./app
不然会:
Permission denied
< 1024 需要 rootsudo ufw allow 8080
[Unit]
Description=Go App
[Service]
ExecStart=/opt/app/app
WorkingDirectory=/opt/app
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable app
sudo systemctl start app
Go 默认 不会打包:
✅ 解决方式:
embed//go:embed config.yaml
var cfg []byte
Ubuntu 默认 UTC
Go 程序注意:
time.LoadLocation("Asia/Shanghai")
或容器中:
ENV TZ=Asia/Shanghai
| 问题 | 原因 |
|---|---|
not found |
CGO / glibc 缺失 |
permission denied |
没 chmod |
signal: killed |
内存不足 |
| 无法监听端口 | 权限 / 防火墙 |
如果你愿意,可以告诉我:
我可以给你 更精确的打包方案。