温馨提示×

golang编译ubuntu包如何打

小樊
35
2026-10-24 23:13:22
栏目: 编程语言

在 Ubuntu(以及其它 Linux 发行版)上,**“打 Golang 编译出来的包”**通常有几种理解,我分场景给你说明,你对照用哪种。


一、只是“编译出 Linux 可执行文件”(最常见)

如果你只是想 在 Ubuntu 上编译 Go 程序,不需要“打包”:

# 安装 Go(以 Ubuntu 为例)
sudo apt update
sudo apt install golang-go

# 编译
cd your_project
go build -o myapp

# 运行
./myapp

交叉编译(在 macOS / Windows 编译 Ubuntu 包)

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp

二、打包成 Debian / Ubuntu (.deb) 包(推荐)

如果你要在 Ubuntu 上 像 apt 安装软件一样分发,用 .deb 包。

方法 1:使用 dpkg-deb(最基础)

目录结构:

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

DEBIAN/control 示例:

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

构建:

dpkg-deb --build myapp

安装:

sudo dpkg -i myapp.deb

方法 2:使用 nfpm(Go 官方社区推荐)

go install github.com/goreleaser/nfpm/v2/cmd/nfpm@latest

nfpm.yaml:

name: myapp
arch: amd64
platform: linux
version: 1.0.0
maintainer: you <you@example.com>
description: My Go app
contents:
  - src: ./myapp
    dst: /usr/local/bin/myapp

打包:

nfpm package -f nfpm.yaml -t myapp.deb

三、用 GitHub Actions 自动打 Ubuntu 包

- name: Build
  run: |
    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp

- name: Package deb
  run: |
    nfpm package -f nfpm.yaml -t myapp.deb

四、如果是“容器 / Snap / 其他”

  • Docker(最常用)
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app

FROM ubuntu
COPY --from=build /src/app /usr/local/bin/app
  • Snap(Ubuntu 官方)
snapcraft

总结推荐

需求 推荐方式
只是运行 go build
服务器部署 静态编译 + systemd
软件分发 .deb(nfpm)
CI 自动发布 GitHub Actions + nfpm

如果你能说清楚:

  • 是 本机编译 还是 交叉编译
  • 是 内部用 还是 对外发布
  • 要不要 systemd / 服务化

我可以直接给你一套完整示例。

0 踩