在 Ubuntu 上用 Go(Golang)“打包好”通常指两件事之一:
下面按常见场景给你清晰步骤。
sudo apt update
sudo apt install golang-go
# 或官方版本
# https://go.dev/dl/
检查:
go version
cd your_project
go build -o myapp
生成:
./myapp
✅ 这就是“打包好”的最基础形式
go build -ldflags="-s -w" -o myapp
说明:
-s -w:去掉调试信息,体积更小GOOS=windows GOARCH=amd64 go build -o myapp.exe
GOOS=darwin GOARCH=amd64 go build -o myapp_mac
sudo apt install musl-tools
CGO_ENABLED=0 go build -ldflags="-s -w" -o myapp
✅ 可在任意 Linux 直接运行(Docker 友好)
sudo cp myapp /usr/local/bin/
sudo vim /etc/systemd/system/myapp.service
内容:
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
WorkingDirectory=/usr/local/bin
Restart=always
User=www-data
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
dpkg-debmkdir -p myapp_deb/DEBIAN
mkdir -p myapp_deb/usr/local/bin
cp myapp myapp_deb/usr/local/bin/
vim myapp_deb/DEBIAN/control
control 文件:
Package: myapp
Version: 1.0
Section: base
Priority: optional
Architecture: amd64
Maintainer: you@example.com
Description: My Go Application
打包:
dpkg-deb --build myapp_deb
生成:
myapp_deb.deb
安装:
sudo dpkg -i myapp_deb.deb
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app
FROM alpine
WORKDIR /app
COPY --from=build /app/app .
CMD ["./app"]
构建:
docker build -t myapp .
| 场景 | 推荐方式 |
|---|---|
| 服务器运行 | 静态编译 + systemd |
| 分发他人 | deb |
| 云原生 | Docker |
| 跨平台 | 交叉编译 |
如果你愿意,可以告诉我:
我可以直接给你一套最合适的打包方案。