在 Ubuntu(或其他 Linux 系统)中使用 Go(Golang)打包,通常分为编译成可执行文件、交叉编译、以及打包成 deb / 容器 / 发布包几种情况。下面按常见需求说明。
sudo apt update
sudo apt install golang-go
# 或官方版本
# https://go.dev/dl/
检查:
go version
cd your_project
go build
会生成与目录同名的可执行文件:
./your_project
指定输出名称:
go build -o myapp
go build -ldflags="-s -w" -o myapp
避免依赖 glibc 动态库:
CGO_ENABLED=0 go build -ldflags="-s -w" -o myapp
GOOS=windows GOARCH=amd64 go build -o myapp.exe
GOOS=darwin GOARCH=arm64 go build -o myapp_mac
常见组合:
| 系统 | GOOS | GOARCH |
|---|---|---|
| Linux | linux | amd64 |
| Windows | windows | amd64 |
| macOS | darwin | arm64 / amd64 |
dpkg-deb(简单)目录结构:
myapp/
├── DEBIAN
│ └── control
└── usr
└── local
└── bin
└── myapp
control 文件示例:
Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you@example.com
Description: My Go App
打包:
dpkg-deb --build myapp
安装:
sudo dpkg -i myapp.deb
nfpm(现代方式)go install github.com/goreleaser/nfpm/v2/cmd/nfpm@latest
配置 nfpm.yaml 后:
nfpm package
build:
CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/myapp
deb:
dpkg-deb --build myapp
make build
tar -czvf myapp-linux-amd64.tar.gz myapp
FROM golang:1.22 as build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp
FROM alpine
COPY --from=build /app/myapp /myapp
CMD ["/myapp"]
chmod +x myapp
使用:
CGO_ENABLED=0 go build
推荐:
goreleaserxgo如果你能说明:
我可以给你一套完整打包方案。