Build
go build 是 Go 语言用于编译源码并生成可执行二进制文件的核心命令。
示例命令解析
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build 这条命令常用于在 macOS 或 Windows 等非 Linux 开发机上,交叉编译出能在 Linux 服务器上独立运行的二进制文件。
CGO_ENABLED=0: 禁用 CGO。生成的二进制文件不依赖系统的 C 库(如 glibc),实现完全的纯 Go 静态编译,非常适合部署在 scratch 或 alpine 等轻量级 Docker 镜像中。
GOOS=linux: 指定目标操作系统为 Linux(实现跨平台交叉编译的关键参数)。
GOARCH=amd64: 指定目标 CPU 架构为 x86_64(64位)。
常用编译参数
-o
-ldflags "
-trimpath: 移除编译后的二进制文件中的本地绝对路径,确保不同机器编译出的文件哈希一致,提升构建的可复现性并保护开发路径隐私。
-v: 打印出正在编译的包名,方便观察依赖项和编译进度。
-x: 打印出编译过程中执行的具体底层命令(如调用 cmd/compile、link 等),常用于排查编译异常。
-race: 开启数据竞争检测,主要用于测试和开发阶段,能找出并发代码中的读写冲突问题。
检测脚本
check.sh
#!/bin/bash
# 获取操作系统
GOOS=$(uname -s | tr '[:upper:]' '[:lower:]')
# 获取架构并映射为 Go 的命名规范
ARCH=$(uname -m)
case "$ARCH" in
x86_64)
GOARCH="amd64"
;;
aarch64|arm64)
GOARCH="arm64"
;;
armv7l|armv8l)
GOARCH="arm"
;;
i386|i686)
GOARCH="386"
;;
riscv64)
GOARCH="riscv64"
;;
*)
echo "不支持的架构: $ARCH"
exit 1
;;
esac
echo "检测到平台: GOOS=$GOOS GOARCH=$GOARCH"