温馨提示×

golang在ubuntu如何打包好

小樊
53
2026-10-24 22:45:25
栏目: 编程语言

在 Ubuntu 上用 Go(Golang)“打包好”通常指两件事之一:

  1. 编译成可执行文件(最常见)
  2. 打包成 deb / snap / docker 等可分发形式

下面按常见场景给你清晰步骤。


一、基础:编译成 Linux 可执行文件(最常用)

1️⃣ 安装 Go

sudo apt update
sudo apt install golang-go
# 或官方版本
# https://go.dev/dl/

检查:

go version

2️⃣ 编译项目

cd your_project
go build -o myapp

生成:

./myapp

✅ 这就是“打包好”的最基础形式


3️⃣ 推荐编译参数(生产可用)

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

说明:

  • -s -w:去掉调试信息,体积更小
  • 非常适合服务器部署

二、交叉编译(在 Ubuntu 打其他平台包)

编译 Windows

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

编译 macOS

GOOS=darwin GOARCH=amd64 go build -o myapp_mac

三、静态编译(避免依赖 libc)

使用 musl(推荐)

sudo apt install musl-tools
CGO_ENABLED=0 go build -ldflags="-s -w" -o myapp

✅ 可在任意 Linux 直接运行(Docker 友好)


四、打包成 systemd 服务(服务器常用)

1️⃣ 复制可执行文件

sudo cp myapp /usr/local/bin/

2️⃣ 创建服务

sudo vim /etc/systemd/system/myapp.service

内容:

[Unit]
Description=My Go App
After=network.target

[Service]
ExecStart=/usr/local/bin/myapp
WorkingDirectory=/usr/local/bin
Restart=always
User=www-data

[Install]
WantedBy=multi-user.target

3️⃣ 启动

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

五、打包成 deb 安装包(Ubuntu 风格)

使用 dpkg-deb

mkdir -p myapp_deb/DEBIAN
mkdir -p myapp_deb/usr/local/bin

cp myapp myapp_deb/usr/local/bin/

vim myapp_deb/DEBIAN/control

control 文件:

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

打包:

dpkg-deb --build myapp_deb

生成:

myapp_deb.deb

安装:

sudo dpkg -i myapp_deb.deb

六、Docker 打包(最推荐)

Dockerfile 示例

FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app

FROM alpine
WORKDIR /app
COPY --from=build /app/app .
CMD ["./app"]

构建:

docker build -t myapp .

七、总结(怎么选)

场景 推荐方式
服务器运行 静态编译 + systemd
分发他人 deb
云原生 Docker
跨平台 交叉编译

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

  • 是 Web / CLI / 后台服务
  • 是否要 给别人用
  • 是否用 Docker

我可以直接给你一套最合适的打包方案。

0 踩