温馨提示×

golang在ubuntu打包的步骤

小樊
41
2025-11-14 20:47:13
栏目: 编程语言

在 Ubuntu 上打包 Golang 程序的实用步骤

一 准备环境

  • 安装 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.go 或 go.mod)
  • 下载依赖:go mod tidy
  • 构建:go build -o myapp main.go(二进制名为 myapp;在 Linux 上默认可直接执行)
  • 运行测试:./myapp

三 交叉编译与多平台产物

  • 常用环境变量
    • CGO_ENABLED=0:禁用 CGO,便于得到静态二进制,跨平台更稳定
    • GOOS:目标操作系统(如 linux、windows、darwin)
    • GOARCH:目标架构(如 amd64、arm64)
  • 示例命令
    • Linux amd64:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/myapp-linux-amd64 main.go
    • Windows 64 位:CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/myapp-windows-amd64.exe main.go
    • macOS amd64:CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/myapp-darwin-amd64 main.go
  • 批量多平台(需安装工具):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.gz:tar czvf myapp-linux-amd64.tar.gz bin/myapp-linux-amd64
    • zip: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
  • 自动化脚本
    • Makefile 示例:
      • GO := go
      • OUT := bin/myapp
      • build:
        • CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GO) build -o $(OUT) .
      • clean:
        • rm -f $(OUT)
    • 使用:make build / make clean
  • Shell 脚本示例(build.sh)
    • 赋予执行权限:chmod +x build.sh
    • 使用:./build.sh build / ./build.sh clean

0