温馨提示×

Ubuntu上Golang打包流程是怎样的

小樊
45
2026-06-30 20:08:32
栏目: 编程语言

Ubuntu 上,Golang 的“打包”通常指两种场景

  1. 把 Go 程序编译成可执行文件(最常见)
  2. 把 Go 程序打包成 Ubuntu/Debian 的 .deb 安装包(发布用)

下面我按 完整流程 给你讲一遍,从环境准备到最终产物。


一、环境准备(Ubuntu)

1️⃣ 安装 Go(推荐官方方式)

sudo apt update
sudo apt install -y golang-go

安装最新版(推荐)

wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz

配置环境变量:

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

验证:

go version

二、Go 项目结构示例

myproject/
├── main.go
├── go.mod
└── go.sum

main.go 示例:

package main

import "fmt"

func main() {
    fmt.Println("Hello Ubuntu")
}

初始化模块:

go mod init myproject

三、Go 程序编译(核心打包流程)

✅ 1️⃣ 基本编译

go build

生成:

myproject   # 可执行文件

✅ 2️⃣ 指定输出名称

go build -o myapp

✅ 3️⃣ 交叉编译(Ubuntu → Linux)

GOOS=linux GOARCH=amd64 go build -o myapp

常用组合:

目标系统 GOOS GOARCH
Ubuntu linux amd64
ARM 服务器 linux arm64
Windows windows amd64
macOS darwin amd64

✅ 4️⃣ 减小体积(生产推荐)

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

再配合:

upx myapp

(需安装 upx


四、Go 程序打包成 .deb(Ubuntu 安装包)

✅ 1️⃣ 安装打包工具

sudo apt install -y build-essential dpkg-dev

✅ 2️⃣ 创建 Debian 目录结构

myapp/
├── DEBIAN/
│   └── control
└── usr/
    └── local/
        └── bin/
            └── myapp

✅ 3️⃣ 编写 DEBIAN/control

Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you@example.com
Description: My Go Application
 A simple Go app packaged for Ubuntu

✅ 4️⃣ 复制可执行文件

cp myapp myapp/usr/local/bin/
chmod 755 myapp/usr/local/bin/myapp

✅ 5️⃣ 构建 .deb

dpkg-deb --build myapp

输出:

myapp.deb

✅ 6️⃣ 安装 & 卸载

sudo dpkg -i myapp.deb
sudo dpkg -r myapp

五、CI / 自动化打包(推荐)

Makefile 示例

build:
	GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o myapp

deb: build
	mkdir -p pkg/usr/local/bin
	cp myapp pkg/usr/local/bin/
	dpkg-deb --build pkg myapp.deb

六、常见坑位提醒

CGO 问题

CGO_ENABLED=0 go build

权限问题

chmod +x myapp

Ubuntu 版本兼容

  • 编译机和目标机 glibc 版本尽量一致

七、总结一句话

Ubuntu 上 Golang 打包流程 = 编译 → 可选压缩 → 可选 deb 封装

如果你愿意,我可以:

  • ✅ 帮你写一个 完整 deb 打包模板
  • ✅ 教你 用 GitHub Actions 自动打 deb
  • ✅ 教你 systemd + deb 做成服务

你现在是要 本地打包 还是 服务器发布

0