温馨提示×

ubuntu如何编译打包golang

小樊
47
2026-10-19 00:24:49
栏目: 编程语言

在 Ubuntu 上编译和打包 Go(Golang)程序,一般流程包括:安装 Go → 编写/获取代码 → 编译 → 打包(二进制 / deb / 容器等)。下面按常见场景说明。


一、安装 Go(Ubuntu)

方式 1:用官方二进制(推荐)

# 以 go1.22 为例
wget https://go.dev/dl/go1.22.2.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gz

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

go version

方式 2:apt(版本可能较旧)

sudo apt update
sudo apt install golang-go

二、编译 Go 程序

1. 基础编译

go build -o myapp main.go

2. 交叉编译(例如在 Ubuntu 上编译 Linux 可执行文件)

GOOS=linux GOARCH=amd64 go build -o myapp

3. 精简二进制(去调试信息)

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

4. 使用 go mod

go mod init myapp
go mod tidy
go build

三、打包方式(常见)

✅ 方式 1:直接打包二进制(最简单)

tar czvf myapp.tar.gz myapp

适合:

  • 内部服务
  • 容器部署
  • 服务器直接运行

✅ 方式 2:打包为 systemd 服务

sudo cp myapp /usr/local/bin/

创建服务文件:

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

内容示例:

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

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

[Install]
WantedBy=multi-user.target

启用:

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

✅ 方式 3:打包为 .deb(适合 Ubuntu 分发)

使用 dpkg-deb

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

cp myapp myappdeb/usr/local/bin/

nano myappdeb/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 myappdeb

安装:

sudo dpkg -i myappdeb.deb

✅ 方式 4:Docker 打包(推荐生产)

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

FROM ubuntu:22.04
COPY --from=build /src/app /usr/local/bin/app
CMD ["app"]

构建:

docker build -t myapp .

四、常见注意事项

  • 静态编译(避免依赖 glibc):
CGO_ENABLED=0 go build
  • 权限问题:服务器运行建议非 root 用户
  • 日志:用 systemd 或 stdout

如果你有具体需求(例如:
✅ 打包成 deb 并签名
✅ 编译 ARM 架构
✅ 多模块项目
✅ Kubernetes 部署)

可以直接告诉我,我可以给你更精确的方案。

0 踩