温馨提示×

ubuntu中golang怎样打包

小樊
47
2026-10-24 22:37:20
栏目: 编程语言

在 Ubuntu(或其他 Linux 系统)中使用 Go(Golang)打包,通常分为编译成可执行文件、交叉编译、以及打包成 deb / 容器 / 发布包几种情况。下面按常见需求说明。


一、最基础的打包(编译为可执行文件)

1. 安装 Go

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

检查:

go version

2. 编译当前项目

cd your_project
go build

会生成与目录同名的可执行文件:

./your_project

指定输出名称:

go build -o myapp

3. 编译时去掉调试信息(更小)

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

4. 静态编译(推荐 Linux 服务器使用)

避免依赖 glibc 动态库:

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

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

示例:Ubuntu → Windows

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

示例:Ubuntu → macOS

GOOS=darwin GOARCH=arm64 go build -o myapp_mac

常见组合:

系统 GOOS GOARCH
Linux linux amd64
Windows windows amd64
macOS darwin arm64 / amd64

三、打包成 Ubuntu 的 deb 安装包(推荐)

方法 1:使用 dpkg-deb(简单)

目录结构:

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

control 文件示例:

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

打包:

dpkg-deb --build myapp

安装:

sudo dpkg -i myapp.deb

方法 2:使用 nfpm(现代方式)

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

配置 nfpm.yaml 后:

nfpm package

四、使用 Makefile 自动打包(常用)

build:
	CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/myapp

deb:
	dpkg-deb --build myapp
make build

五、发布用(GitHub / 服务器)

1. 压缩

tar -czvf myapp-linux-amd64.tar.gz myapp

2. Docker 打包(推荐)

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

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

六、常见问题

1. 打包后无法运行

chmod +x myapp

2. 提示缺少库

使用:

CGO_ENABLED=0 go build

3. 想一键多平台打包

推荐:

  • goreleaser
  • xgo

如果你能说明:

  • 是 命令行工具 / Web 服务 / GUI
  • 是否要 deb / rpm / docker
  • 是否要 自动发布

我可以给你一套完整打包方案。

0 踩