使用go build命令直接编译项目,生成可执行文件。适用于简单项目,无需复杂配置。
步骤:
main.go文件);go build -o 输出文件名(如go build -o myapp)。通过设置GOOS(目标操作系统)和GOARCH(目标架构)环境变量,实现在Ubuntu上为其他平台编译可执行文件。
常用组合示例:
GOOS=windows GOARCH=amd64 go build -o myapp.exe;GOOS=linux GOARCH=amd64 go build -o myapp;GOOS=darwin GOARCH=amd64 go build -o myapp。通过编写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:
$(GO) build -o $(BUILD_TARGET) $(BUILD_ENV) $(PROJECT_PATH)
clean:
rm -f $(BUILD_TARGET)
使用方式:在项目根目录运行make(编译)、make clean(清理)。
通过编写build.sh脚本,实现编译、清理的命令封装,适合不熟悉Makefile的用户。
示例build.sh内容:
#!/bin/bash
GO := go
PROJECT_PATH := $(shell pwd)
OUTPUT_NAME := myapp
BUILD_TARGET := $(PROJECT_PATH)/bin/$(OUTPUT_NAME)
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(编译)、./build.sh clean(清理)。
使用upx工具压缩生成的可执行文件,减少文件大小(尤其适合分发)。
步骤:
upx:sudo apt-get install upx;upx --best myapp(--best表示最高压缩率)。通过Docker将应用程序及其依赖打包为镜像,确保跨环境一致性。
示例Dockerfile内容:
FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp cmd/myapp/main.go
FROM scratch
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["/myapp"]
使用方式:
docker build -t myapp;docker run -d --name myapp-container -p 8080:8080 myapp(假设应用监听8080端口)。scratch为基础镜像,生成最小化容器(仅包含应用程序),适合云原生部署。通过设置CGO_ENABLED=0和-ldflags参数,生成不依赖系统动态库的可执行文件,提升可移植性。
命令示例:
CGO_ENABLED=0 go build -ldflags="-s -w" -o myapp main.go
参数说明:
CGO_ENABLED=0:禁用CGO(避免依赖C库);-ldflags="-s -w":去除符号表和调试信息(减小体积)。为可执行文件添加GPG签名,确保文件完整性和来源可信。
步骤概述:
sudo apt-get install gnupg;gpg --gen-key(按提示设置密钥信息);gpg --export -a "Your Name" > public.key;gpg --detach-sign --armor myapp(生成myapp.asc签名文件)。gpg --verify myapp.asc myapp。