在 Ubuntu 上用 Golang 打包并不难,而且相比很多其他语言(如 Java、C++)反而更简单。下面从几个常见场景给你说明一下。
如果你只是在 Ubuntu 上编译一个可执行文件:
go build -o myapp main.go
或者:
go build
生成的就是一个 二进制可执行文件,直接运行即可:
./myapp
✅ 不需要依赖运行时(如 JVM)
✅ 不依赖外部库(除非你用了 cgo)
Golang 原生支持交叉编译,非常简单。
GOOS=linux GOARCH=amd64 go build -o app-linux
GOOS=windows GOARCH=amd64 go build -o app.exe
GOOS=darwin GOARCH=arm64 go build -o app-mac
✅ 一个命令搞定,不需要额外工具链
如果你想在 Ubuntu 上分发软件,可以打成 .deb 包。
dpkg-deb(原生)mkdir -p myapp/DEBIAN
mkdir -p myapp/usr/bin
cp app myapp/usr/bin/
写 control 文件:
cat > myapp/DEBIAN/control <<EOF
Package: myapp
Version: 1.0
Architecture: amd64
Maintainer: you@example.com
Description: My Golang App
EOF
打包:
dpkg-deb --build myapp
nfpm(推荐)nfpm package --target myapp.deb
配置文件示例(nfpm.yaml):
name: myapp
arch: amd64
platform: linux
version: 1.0.0
maintainer: you@example.com
description: My Golang App
contents:
- src: ./app
dst: /usr/bin/app
Golang + Docker 在 Ubuntu 上非常常见:
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN go build -o app
FROM ubuntu:22.04
COPY --from=build /app/app /usr/bin/app
CMD ["app"]
docker build -t myapp .
✅ 部署非常干净
✅ 不用担心依赖问题
只有在以下情况才会复杂一点:
Ubuntu 上 Golang 打包:简单、干净、可控,比大多数语言都省心。
如果你是:
你可以告诉我你是打什么类型的包(CLI / Web / 桌面 / .deb / Docker),我可以给你更具体的示例。