全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-14 7 分钟 ✍️ juanwangdev

Go构建与交叉编译

Go支持跨平台编译,无需目标平台工具链即可生成可执行文件。

go build基本使用

基本命令

Bash
# 编译当前目录
go build

# 编译指定包
go build ./cmd/server

# 指定输出文件名
go build -o myapp

# 编译并运行
go build && ./myapp

编译选项

Bash
# 指定输出名称
go build -o myapp main.go

# 减少二进制大小
go build -ldflags="-s -w"

# 静态编译(无动态链接)
go build -ldflags="-extldflags '-static'"

# 显示编译详情
go build -v

# 显示编译包
go build -x

交叉编译

GOOS和GOARCH设置

Bash
# GOOS:目标操作系统
# GOARCH:目标架构

# Linux amd64编译
GOOS=linux GOARCH=amd64 go build -o myapp-linux

# Windows amd64编译
GOOS=windows GOARCH=amd64 go build -o myapp.exe

# macOS arm64(M系列芯片)
GOOS=darwin GOARCH=arm64 go build -o myapp-mac

# Linux arm(树莓派)
GOOS=linux GOARCH=arm go build -o myapp-arm

支持的GOOS值

Bash
- linux:Linux系统
- windows:Windows系统
- darwin:macOS系统
- freebsd:FreeBSD系统
- android:Android
- ios:iOS

支持的GOARCH值

Bash
- amd64:64位x86架构
- arm64:64位ARM架构
- arm:32位ARM架构
- 386:32位x86架构
- mips/mips64:MIPS架构

查看支持组合

Bash
# 查看所有支持的GOOS/GOARCH组合
go tool dist list

# 输出:
# linux/amd64
# linux/arm
# windows/amd64
# darwin/amd64
# darwin/arm64
# ...

编译优化

减小二进制大小

Bash
# 移除调试信息和符号表
go build -ldflags="-s -w"

# -s:移除符号表
# -w:移除DWARF调试信息

# 效果:减小约30%体积

嵌入版本信息

Bash
# 编译时注入版本信息
go build -ldflags="-X main.version=v1.0.0"

# main.go
var version string
func main() {
    fmt.Println(version)  // v1.0.0
}

strip进一步减小

Bash
# Linux上使用strip
go build -ldflags="-s -w" -o myapp
strip myapp

# 可减小至最小体积

编译模式

静态编译

Go
# 完全静态链接(Linux)
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o myapp

# 不依赖系统库
# 适合容器化部署

PIE模式

Go
# 位置无关可执行文件
go build -buildmode=pie

# 增强安全性(地址随机化)

条件编译

文件名条件编译

Bash
// 文件名包含GOOS或GOARCH自动选择性编译

// 只在Linux编译
main_linux.go

// 只在Windows编译
main_windows.go

// 只在amd64架构编译
main_amd64.go

// 组合条件
main_linux_amd64.go

构建标签

text
// 文件开头添加构建标签
// +build linux

package main

// 只在Linux编译此文件

// 多条件
// +build linux,amd64

// 排除条件
// +build !windows

编译流程表

步骤命令说明
编译go build默认编译
指定输出-o name自定义文件名
交叉编译GOOS=x GOARCH=y目标平台
优化体积-ldflags="-s -w"移除调试
静态编译CGO_ENABLED=0无动态链接

常用编译组合

text
# 生产环境Linux编译
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags="-s -w" -o myapp-linux

# Windows桌面编译
GOOS=windows GOARCH=amd64 \
go build -ldflags="-H windowsgui" -o myapp.exe

# macOS通用编译(Intel + M芯片)
GOOS=darwin GOARCH=amd64 go build -o myapp-mac-amd64
GOOS=darwin GOARCH=arm64 go build -o myapp-mac-arm64

要点总结

  • GOOS设置目标操作系统
  • GOARCH设置目标架构
  • go build -o指定输出文件名
  • -ldflags="-s -w"减小二进制体积
  • CGO_ENABLED=0禁用CGO,纯静态编译
  • 文件名和构建标签实现条件编译
  • 查看支持平台:go tool dist list
  • Go交叉编译无需目标平台工具链

📝 发现内容有误?点击此处直接编辑

← 上一篇 Go文档生成
下一篇 → Go配置管理与环境变量
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库