使用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
。