在 Ubuntu 上用 Go(Golang)打包程序,一般分几种情况:本地打包、交叉编译、做成 deb 包、用 Docker。下面给你一个实用清单。
sudo apt update
sudo apt install golang-go
或官方方式:
wget https://go.dev/dl/go1.22.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.linux-amd64.tar.gz
配置环境变量:
export PATH=$PATH:/usr/local/go/bin
cd your_project
go build -o app main.go
生成 app,直接运行:
./app
常用参数
go build -ldflags "-s -w" -o app main.go # 减小体积
GOOS=linux GOARCH=amd64 go build -o app
GOOS=windows GOARCH=amd64 go build -o app.exe
GOOS=darwin GOARCH=arm64 go build -o app
避免依赖 glibc 问题:
CGO_ENABLED=0 GOOS=linux go build -o app
sudo apt install dpkg-dev
myapp/
├── DEBIAN
│ └── control
├── usr
│ └── local
│ └── bin
│ └── app
control 示例:
Package: myapp
Version: 1.0
Architecture: amd64
Maintainer: you@example.com
Description: My Go App
dpkg-deb --build myapp
安装:
sudo dpkg -i myapp.deb
sudo vim /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
[Service]
ExecStart=/usr/local/bin/app
WorkingDirectory=/opt/myapp
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable myapp
sudo systemctl start myapp
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app
FROM alpine
COPY --from=build /app/app /app
CMD ["/app"]
docker build -t myapp .
go buildCGO_ENABLED=0 go builddpkg-deb 或 Docker如果你说的是**“打包成安装包 / 发布给别人 / CI 自动打包”**,告诉我具体场景,我可以给你更精确的方案。