商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > golang在ubuntu打包的步骤

golang在ubuntu打包的步骤

  发布于2026-07-03 阅读(0)

扫一扫,手机访问

在 Ubuntu 上打包 Golang 程序,其实没有想象中那么复杂。很多开发者习惯在本地写好代码,直接 go build 完事,但一旦涉及到跨平台分发、容器部署或者交付给测试环境,就会发现事情没那么简单。今天就把这条完整的打包链路梳理一遍——从环境搭建,到交叉编译,再到容器化,一步不落。

golang在ubuntu打包的步骤

一、准备环境

首先,Go 语言环境得装好。两种主流方式任选其一:

  • 用发行版仓库sudo apt-get update && sudo apt-get install -y golang —— 省心,但版本可能不是最新的。
  • 从官网下载二进制包wget https://golang.google.cn/dl/go1.22.0.linux-amd64.tar.gz && sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz —— 推荐,版本可控。

环境变量需要配置好,写入 ~/.bashrc/etc/profile

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

执行 source ~/.bashrc 让它生效,然后 go version 确认版本号已正常输出即可。

二、本地构建可执行文件

进入项目根目录(确保有 main.gogo.mod),先拉取依赖:

go mod tidy

然后直接构建:

go build -o myapp main.go

生成的 myapp 在 Linux 下默认就是可执行的,运行 ./myapp 测试一下,没问题再往下走。

三、交叉编译与多平台产物

这是 Go 最方便的地方——一套代码,编译出不同平台的二进制文件。关键在于三个环境变量:

  • CGO_ENABLED=0:禁用 CGO,得到静态二进制,避免跨平台时的动态链接问题。
  • GOOS:目标操作系统,比如 linuxwindowsdarwin
  • GOARCH:目标架构,比如 amd64arm64

举几个常用例子:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/myapp-linux-amd64 main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/myapp-windows-amd64.exe main.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/myapp-darwin-amd64 main.go

如果平台很多,一个个手动跑太麻烦,可以借助 gox 实现批量构建:

go get github.com/mitchellh/gox
gox -output="bin/myapp_{{.OS}}_{{.Arch}}" main.go

四、减小体积与产物归档

编译出来的二进制文件通常不小,尤其是静态链接后。想进一步瘦身,可以用 UPX 压缩:

sudo apt-get install -y upx
upx --best bin/myapp-linux-amd64

压缩效果很明显,不过极少数场景下可能会有启动开销,实测影响不大。然后打包成归档文件方便分发:

tar czvf myapp-linux-amd64.tar.gz bin/myapp-linux-amd64
zip myapp-linux-amd64.zip bin/myapp-linux-amd64

五、容器化打包与自动化

生产环境里,Docker 镜像几乎是标准交付方式。多阶段构建既能减小镜像体积,又能保证编译环境干净:

# Dockerfile
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o myapp .

FROM scratch
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["/myapp"]

构建镜像:docker build -t myapp:latest .

运行容器:docker run --rm -p 8080:8080 myapp:latest

如果不想每次手动敲 docker 命令,写个 Makefile 或 Shell 脚本更省力。Makefile 示例:

GO := go
OUT := bin/myapp

build:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -o $(OUT) .

clean:
	rm -f $(OUT)

使用时 make buildmake clean。也可以写一个 build.sh,赋予执行权限 chmod +x build.sh,然后 ./build.sh build 即可。

整套流程跑通之后,后续只需要关注代码本身,打包分发的事情交给脚本和 Docker 就好。效率提升不止一点点。

本文转载于:https://www.yisu.com/ask/36019371.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注