在 Windows 上做 Go 跨平台编

在 Windows 上做 Go 跨平台编译,核心就是:装 Go → 设 GOOS/GOARCH → 禁用 CGO → go build,一条命令即可产出 Linux/macOS/Windows 二进制。下面从环境准备到常用命令、避坑、脚本化,一步到位。


一、环境准备(Windows)

1. 安装 Go
  • 下载:https://go.dev/dl/,选 Windows amd64 MSI(推荐 1.21+)。
  • 安装后,打开 PowerShell 或 CMD 验证:
powershell 复制代码
go version
# 输出类似:go version go1.22.5 windows/amd64
  • 确保 GOROOT、GOPATH、PATH 已自动配置好。
2. 核心环境变量(必懂)
  • CGO_ENABLED=0 :禁用 CGO,纯静态编译,无依赖,跨平台最稳(默认 1)。
  • GOOS:目标系统(linux/darwin/windows)。
  • GOARCH:目标架构(amd64/arm64/386)。

二、PowerShell 编译命令(最常用)

1. 编译 Linux(服务器主流)
powershell 复制代码
# Linux amd64(x64 服务器)
$env:CGO_ENABLED="0"; $env:GOOS="linux"; $env:GOARCH="amd64"
go build -o dist/myapp-linux-amd64 .

# Linux arm64(树莓派4、ARM服务器)
$env:CGO_ENABLED="0"; $env:GOOS="linux"; $env:GOARCH="arm64"
go build -o dist/myapp-linux-arm64 .
2. 编译 macOS
powershell 复制代码
# macOS Intel(amd64)
$env:CGO_ENABLED="0"; $env:GOOS="darwin"; $env:GOARCH="amd64"
go build -o dist/myapp-darwin-amd64 .

# macOS M1/M2/M3(arm64)
$env:CGO_ENABLED="0"; $env:GOOS="darwin"; $env:GOARCH="arm64"
go build -o dist/myapp-darwin-arm64 .
3. 编译 Windows(指定架构)
powershell 复制代码
# Windows amd64(64位 exe)
$env:CGO_ENABLED="0"; $env:GOOS="windows"; $env:GOARCH="amd64"
go build -o dist/myapp-windows-amd64.exe .

# Windows 386(32位 exe)
$env:CGO_ENABLED="0"; $env:GOOS="windows"; $env:GOARCH="386"
go build -o dist/myapp-windows-386.exe .

三、CMD 编译命令(兼容旧终端)

cmd 复制代码
:: Linux amd64
set CGO_ENABLED=0
set GOOS=linux
set GOARCH=amd64
go build -o dist/myapp-linux-amd64 .

:: macOS arm64
set CGO_ENABLED=0
set GOOS=darwin
set GOARCH=arm64
go build -o dist/myapp-darwin-arm64 .

四、一键多平台编译脚本(build-all.ps1)

在项目根目录新建 build-all.ps1:

powershell 复制代码
# 创建输出目录
New-Item -ItemType Directory -Force -Path dist

# 定义目标平台列表
$targets = @(
    @{OS="linux"; ARCH="amd64"; OUT="myapp-linux-amd64"},
    @{OS="linux"; ARCH="arm64"; OUT="myapp-linux-arm64"},
    @{OS="darwin"; ARCH="amd64"; OUT="myapp-darwin-amd64"},
    @{OS="darwin"; ARCH="arm64"; OUT="myapp-darwin-arm64"},
    @{OS="windows"; ARCH="amd64"; OUT="myapp-windows-amd64.exe"}
)

# 循环编译
foreach ($t in $targets) {
    $env:CGO_ENABLED="0"
    $env:GOOS=$t.OS
    $env:GOARCH=$t.ARCH
    Write-Host "正在编译:$($t.OS)/$($t.ARCH) → dist/$($t.OUT)"
    go build -o "dist/$($t.OUT)" .
}

Write-Host "`n✅ 全部编译完成,输出目录:./dist"

运行:

powershell 复制代码
.\build-all.ps1

产出:

复制代码
dist/
├── myapp-linux-amd64
├── myapp-linux-arm64
├── myapp-darwin-amd64
├── myapp-darwin-arm64
└── myapp-windows-amd64.exe

五、关键注意事项(避坑)

  1. 禁用 CGO(必须) :CGO_ENABLED=0,否则可能依赖系统库,Linux 下报 not found。

  2. 代码跨平台兼容 :

    • 路径用 filepath.Join(),不要硬写 / 或 \。
    • 避免平台专属 syscall(如 Windows 的 CreateProcess)。
    • 日志、配置文件路径用相对路径或环境变量。
  3. 验证二进制 :

    • Linux:chmod +x myapp && ./myapp --help
    • macOS:./myapp-darwin-arm64 --help
    • Windows:双击 exe 或 myapp.exe --help
  4. 启用 CGO 的情况(慎用) :

    • 需调用 C 代码时,必须安装目标平台交叉工具链(如 aarch64-linux-musl-gcc)。
    • 命令示例:
    powershell 复制代码
    $env:CGO_ENABLED="1"; $env:GOOS="linux"; $env:GOARCH="amd64"; $env:CC="x86_64-linux-musl-gcc"
    go build -o myapp-linux .

六、常见 GOOS/GOARCH 组合

目标平台 GOOS GOARCH
Linux 64位 linux amd64
Linux ARM64 linux arm64
macOS Intel darwin amd64
macOS M1/M2 darwin arm64
Windows 64位 windows amd64
Windows 32位 windows 386

七、总结

Windows 下 Go 跨平台编译极简:一套代码 + 三条环境变量 + go build 。优先用 PowerShell 脚本一键产出多平台二进制,禁用 CGO 保证兼容性,代码做好路径和系统调用兼容即可。

相关推荐
陈工大模型12 小时前
2026 Windows 免费压缩软件横向评测:7-Zip、WinRAR、Bandizip、NanaZip 与 Win 解压缩
windows·电脑·winrar·7-zip·web app·软件·win解压缩
燃烧的枫13 小时前
Windows 下 YOLO26 的 TensorRT C++ 部署
人工智能·pytorch·windows·计算机视觉·tensorrt·cuda·yolo26
钱栈up13 小时前
从 macOS 切回 Windows,我用 5 个免费工具把 80% 操作习惯搬了回来
windows·macos·策略模式
百事牛科技13 小时前
从局部到整体:Excel限制功能的几种实用设置
windows·excel
2601_9496955914 小时前
3DM游戏运行库合集安装教程,缺少DLL文件这样修复
windows·游戏·电脑
golang学习记15 小时前
Python vs Go:2026年到底该怎么选
java·vscode·python·golang·pycharm·goland
茉莉玫瑰花茶15 小时前
GO [ 内存与变量逃逸分析 ]
开发语言·后端·golang
Nontee16 小时前
Quartz 新手入门:定时任务的两个承诺
开发语言·windows·python
weixin_4379619216 小时前
Docker安装(windows)
windows·docker·容器
kyle~16 小时前
Windows 多 AP 同名 Wi-Fi 网络异常问题复盘
网络·windows