温馨提示×

golang在ubuntu如何打包

小樊
35
2026-10-04 08:55:23
栏目: 编程语言

在 Ubuntu 上用 Go(Golang) 打包(编译成可执行文件)通常非常直接。下面按常见场景给你说明。


一、最基础的打包(本机可执行文件)

假设你的项目入口是 main.go:

cd your_project
go build -o myapp main.go

会生成一个名为 myapp 的可执行文件,直接运行:

./myapp

二、交叉编译(常用)

1️⃣ 编译 Linux 可执行文件(在 Ubuntu 上最常见)

GOOS=linux GOARCH=amd64 go build -o myapp

2️⃣ 编译 Windows 程序

GOOS=windows GOARCH=amd64 go build -o myapp.exe

3️⃣ 编译 macOS 程序

GOOS=darwin GOARCH=arm64 go build -o myapp

三、打包成“单文件”(无外部依赖)

Go 默认就是静态链接(不依赖系统库),非常适合部署。

如果你想确保完全静态:

CGO_ENABLED=0 go build -o myapp

四、减小二进制体积(可选)

1️⃣ 去掉调试信息

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

2️⃣ 使用 upx 进一步压缩(Ubuntu 需安装)

sudo apt install upx
upx --best myapp

五、使用 go mod 的项目

如果是标准 Go 项目(有 go.mod):

go mod tidy
go build -o myapp

六、做成系统服务(可选)

如果你是想“部署成后台服务”:

示例 systemd

# /etc/systemd/system/myapp.service
[Unit]
Description=My Go App

[Service]
ExecStart=/path/to/myapp
WorkingDirectory=/path/to
Restart=always

[Install]
WantedBy=multi-user.target

然后:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

七、常见坑提醒

✅ Ubuntu 一般已装 gcc,但 CGO 项目需注意
✅ 交叉编译时 CGO 必须关闭

CGO_ENABLED=0

✅ 确保 go version 支持你要编译的平台


如果你指的是:

  • 打包成 deb 安装包
  • Docker 镜像
  • 发布到服务器
  • 带前端资源的 Go 程序

可以告诉我具体场景,我可以给你更精确的方案。

0 踩