在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
,分发到其他平台需交叉编译)。