Windows环境下Go交叉编译报错:'GOOS=linux'未被识别为命令
解决Go交叉编译在PowerShell中的报错问题
问题原因
你使用的GOOS=linux GOARCH=amd64 go build main.go是类Unix Shell(如bash)的语法,PowerShell不支持这种在命令行前直接临时绑定环境变量的写法,因此会触发GOOS=linux无法识别的报错。
解决方案
方法1:分步设置环境变量再编译
在PowerShell中,通过专用语法先设置环境变量,再执行编译命令:
$env:GOOS = "linux" $env:GOARCH = "amd64" go build main.go
编译完成后若要恢复原有环境变量,可执行:
Remove-Item Env:GOOS Remove-Item Env:GOARCH
方法2:单条命令完成变量设置与编译
PowerShell支持用分号串联命令,实现单行完成操作:
$env:GOOS="linux"; $env:GOARCH="amd64"; go build main.go
方法3:永久设置交叉编译环境(可选)
如果频繁需要编译到linux/amd64平台,可通过Go命令永久配置环境变量:
go env -w GOOS=linux go env -w GOARCH=amd64
之后直接执行go build main.go即可。如需恢复默认设置,执行:
go env -w GOOS=windows go env -w GOARCH=amd64
额外说明
- Go 1.5及之后版本自带完整交叉编译支持,无需执行
go tool dist install -v pkg/runtime或go install -v -a std这类额外操作。 - PowerShell中不支持cmd的
set GOOS=linux语法,设置环境变量必须用$env:变量名的格式,之前的尝试无效正是因为这个原因。
内容的提问来源于stack exchange,提问作者Guilherme Rodrigues
相关产品推荐
相关产品推荐

