温馨提示×

Golang打包的Ubuntu环境怎么配置

小樊
46
2026-06-30 20:07:33
栏目: 编程语言

下面我分常见场景给你讲,基本能覆盖 90% 的 Go 在 Ubuntu 上的打包需求。


一、基础环境:安装 Go(推荐方式)

✅ 方式一:官方二进制(最推荐,版本新、可控)

# 1. 卸载旧版本(如果有)
sudo rm -rf /usr/local/go

# 2. 下载(替换版本号)
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz

# 3. 解压
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz

# 4. 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc

# 5. 生效
source ~/.bashrc

验证:

go version

✅ 方式二:apt(不推荐,版本旧)

sudo apt update
sudo apt install golang-go

⚠️ Ubuntu 仓库里的 Go 版本通常落后很多。


二、Go 项目打包(核心)

1️⃣ 普通 Linux 可执行文件

go build -o app main.go

生成:

./app

2️⃣ 交叉编译(最常见)

✅ Linux → Linux

GOOS=linux GOARCH=amd64 go build -o app main.go

✅ Linux → Windows

GOOS=windows GOARCH=amd64 go build -o app.exe main.go

✅ Linux → macOS

GOOS=darwin GOARCH=amd64 go build -o app main.go

3️⃣ 减小体积(强烈推荐)

go build -ldflags="-s -w" -o app main.go

再进一步(可选):

upx app

三、Ubuntu 打包成 .deb(生产常用)

1️⃣ 安装打包工具

sudo apt install build-essential dpkg-dev

2️⃣ 目录结构示例

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

3️⃣ control 文件内容

Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: yourname <you@example.com>
Description: My Go Application

4️⃣ 构建 deb 包

dpkg-deb --build myapp

输出:

myapp.deb

安装:

sudo dpkg -i myapp.deb

四、Docker 方式(最干净、最推荐)

1️⃣ Dockerfile 示例(多阶段构建)

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

FROM ubuntu:22.04
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]

构建:

docker build -t myapp .

五、常见问题排查

❌ glibc / CGO 问题

如果是 CGO 程序

CGO_ENABLED=1 GOOS=linux go build

如果是 纯 Go

CGO_ENABLED=0 GOOS=linux go build

❌ 权限问题

chmod +x app

六、推荐环境组合(总结)

场景 推荐
本地开发 官方 Go + Ubuntu
生产交付 Docker
系统级安装 .deb
跨平台 交叉编译

如果你愿意,可以告诉我:

  • ✅ 是 本地打包 还是 CI/CD
  • ✅ 是否依赖 CGO / 系统库
  • ✅ 要不要做成 systemd 服务

我可以直接给你一个完整可用模板

0