在 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+)。
  • 安装后,打开 PowerShellCMD 验证:
powershell 复制代码
go version
# 输出类似:go version go1.22.5 windows/amd64
  • 确保 GOROOTGOPATHPATH 已自动配置好。
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 保证兼容性,代码做好路径和系统调用兼容即可。

相关推荐
basketball6161 小时前
Golang:基础语法总结
开发语言·后端·golang
whyfail1 小时前
Codex 下载安装指南:Windows 和 macOS 官方版下载
windows·macos·codex
感谢地心引力1 小时前
在Claude Code里面使用Deepseek-v4,支持mac和Windows双系统
人工智能·windows·macos·ai·deepseek·claude code
c238562 小时前
list(下)
数据结构·windows·list
特立独行的猫a2 小时前
eProsima Fast DDS & Fast DDS Spy & Shapes Demo Windows x64 从源码编译安装完全教程
windows·dds·fastdds·fastddsspy·shapesdemo
ITHAOGE152 小时前
下载| Windows 11 ARM版5月官方ISO系统映像 (适合部分笔记本、苹果M系列芯片电脑、树莓派和部分安卓手机平板)
windows·科技·微软·电脑
会编程的土豆2 小时前
Go 里的 init() 到底是什么(彻底理解)
开发语言·后端·golang
感谢地心引力3 小时前
在codex里面使用Deepseek-v4,支持mac和windows双系统
windows·gpt·macos·ai·codex·deepseek
不总是12 小时前
Windows 系统 Node.js 免安装版(zip)安装与配置教程(2026 最新)
前端·windows·node.js