温馨提示×

ubuntu golang打包有几种

小樊
43
2026-10-19 00:27:25
栏目: 编程语言

在 Ubuntu 上用 Go(Golang)进行“打包”,通常可以从两个层面理解:把 Go 程序编译成可执行文件(构建),以及把程序打包成 Ubuntu/Debian 系统可用的软件包(.deb)。下面分情况说明常见方式。


一、Go 程序编译(基础打包)

1. 直接编译为可执行文件(最常见)

go build -o myapp main.go

或:

go build ./...

特点:

  • 静态编译,依赖少
  • 可直接拷贝运行

2. 交叉编译(为其他平台打包)

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp

常见目标:

  • linux/amd64
  • linux/arm64
  • windows/amd64

3. 使用 -ldflags 减小体积

go build -ldflags="-s -w" -o myapp

4. 使用 upx 进一步压缩(可选)

upx --best myapp

二、Ubuntu / Debian 系统级打包(.deb)

如果你要在 Ubuntu 上“像软件一样安装”,常见有以下几种方式:


1. 使用 dpkg-deb(手动打包)

适合简单程序。

步骤:

mkdir -p myapp/DEBIAN
mkdir -p myapp/usr/bin

cp myapp myapp/usr/bin/

编写 myapp/DEBIAN/control:

Package: myapp
Version: 1.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you@example.com
Description: My Go App

打包:

dpkg-deb --build myapp

2. 使用 checkinstall(最简单)

sudo apt install checkinstall
go build -o myapp
sudo checkinstall ./myapp

优点:

  • 自动生成 .deb
  • 可卸载

3. 使用 dh-make + debuild(标准 Debian 方式)

适合正式发布。

sudo apt install dh-make devscripts
dh_make --makefile --native
debuild -us -uc

生成:

../myapp_1.0_amd64.deb

4. 使用 Go 专用工具(推荐)

✅ goreleaser(最流行)

goreleaser init
goreleaser build

支持:

  • deb
  • rpm
  • snap
  • docker

✅ nfpm

轻量级 deb/rpm 打包:

name: myapp
arch: amd64
version: 1.0.0
nfpm package

5. 打包为 Snap(Ubuntu 官方)

sudo snap install snapcraft
snapcraft

适合:

  • Ubuntu 商店发布
  • 强隔离环境

三、容器化打包(另一种“打包”)

FROM golang:1.22 as build
WORKDIR /app
COPY . .
RUN go build -o app

FROM ubuntu
COPY --from=build /app/app /usr/bin/app

总结对照表

方式 用途 难度
go build 基础可执行 ⭐
dpkg-deb 手动 deb ⭐⭐
checkinstall 快速 deb ⭐⭐
dh-make 标准 deb ⭐⭐⭐
goreleaser 多平台发布 ⭐⭐⭐
snap Ubuntu 生态 ⭐⭐⭐

如果你能说明:

  • 是 命令行工具 / 服务 / GUI
  • 是否要 发布到 Ubuntu 软件源
  • 是否要 CI 自动打包

我可以给你更精确的方案。

0 踩