在Ubuntu上安装Golang是打包的前提。推荐通过系统包管理器安装(简单快捷):
sudo apt update && sudo apt install -y golang
安装完成后,验证安装是否成功:
go version
若输出类似go version go1.22.0 linux/amd64,则表示安装成功。
创建项目目录并编写核心代码(以main.go为例):
mkdir -p ~/myapp && cd ~/myapp
cat > main.go << 'EOF'
package main
import "fmt"
func main() {
fmt.Println("Hello, Ubuntu Golang Packaging!")
}
EOF
若项目使用依赖管理(推荐),初始化Go模块:
go mod init myapp
然后通过go get安装依赖(如github.com/gin-gonic/gin):
go get -u github.com/gin-gonic/gin
使用go build命令编译项目,生成适用于当前系统(Ubuntu Linux)的可执行文件:
go build -o myapp main.go
-o myapp:指定输出文件名(默认为main);go build -o myapp ./。Go支持跨平台编译,通过GOOS(目标操作系统)和GOARCH(目标架构)变量生成不同平台的可执行文件。常见组合:
GOOS=windows GOARCH=amd64 go build -o myapp.exe main.go
GOOS=darwin GOARCH=amd64 go build -o myapp_darwin main.go
GOOS=linux GOARCH=arm64 go build -o myapp_arm64 main.go
交叉编译无需安装目标平台环境,方便分发。
使用upx工具压缩可执行文件,减少磁盘占用和传输时间:
sudo apt install -y upx # 安装upx
upx --best myapp # 压缩(--best表示最高压缩率)
压缩后文件体积可减少50%~70%(如myapp从10MB压缩到3MB)。
通过Makefile或Shell脚本实现一键编译,避免重复输入命令。
Makefile示例(项目根目录创建Makefile):
GO := go
PROJECT_PATH := $(shell pwd)
OUTPUT_NAME := myapp
BUILD_TARGET := $(PROJECT_PATH)/bin/$(OUTPUT_NAME)
BUILD_ENV := CGO_ENABLED=0 GOOS=linux GOARCH=amd64
all: build
build:
@mkdir -p $(PROJECT_PATH)/bin
$(GO) build -o $(BUILD_TARGET) $(BUILD_ENV) $(PROJECT_PATH)
clean:
rm -rf $(PROJECT_PATH)/bin
运行make执行编译,make clean清理生成的文件。
Shell脚本示例(build.sh):
#!/bin/bash
GO := go
PROJECT_PATH := $(shell pwd)
OUTPUT_NAME := myapp
BUILD_TARGET := $(PROJECT_PATH)/bin/$(OUTPUT_NAME)
BUILD_ENV := CGO_ENABLED=0 GOOS=linux GOARCH=amd64
build() {
$(GO) build -o $(BUILD_TARGET) $(BUILD_ENV) $(PROJECT_PATH)
}
clean() {
rm -f $(BUILD_TARGET)
}
case "$1" in
build)
build
;;
clean)
clean
;;
*)
echo "Usage: $0 {build|clean}"
exit 1
;;
esac
赋予执行权限后运行:chmod +x build.sh && ./build.sh build。
默认情况下,Go编译的二进制文件是静态链接的(不依赖外部C库),但若项目使用了CGO(如调用C代码),需禁用CGO生成纯静态文件:
CGO_ENABLED=0 go build -a -installsuffix cgo -o myapp main.go
-a强制重新编译所有包,-installsuffix cgo避免与动态链接库冲突,确保二进制文件可在无Golang环境的系统上运行。
将可执行文件打包为压缩格式(如.tar.gz),便于分发:
tar -czvf myapp.tar.gz myapp
解压后直接运行:tar -xzvf myapp.tar.gz && ./myapp。
以上流程覆盖了Ubuntu环境下Golang打包的全场景需求,可根据项目实际情况选择步骤(如本地开发仅需go build,分发到其他平台需交叉编译)。