为什么go install会将可执行文件生成在$GOPATH\bin\windows_386目录下?
规则说明
你的猜想符合Go工具链的原生设计,具体逻辑如下:
- 当
go install执行时指定的GOOS、GOARCH参数和工具链默认的本地目标架构不一致时,为了避免不同架构的同名二进制文件互相覆盖,工具链会自动在$GOPATH/bin(若配置了$GOBIN则为$GOBIN)目录下创建格式为{GOOS}_{GOARCH}的子目录,将对应架构的编译产物存放到该子目录中。 - 你当前的场景刚好触发了该规则:全局默认
GOARCH为amd64,仅临时在当前终端环境设置了GOARCH=386,属于非默认的交叉编译场景,因此生成的二进制自动存入windows_386子目录。
验证方式
你可以通过以下操作确认默认架构配置:
- 打开未手动设置过
GOARCH的全新终端,执行go env GOARCH,输出结果即为全局默认架构,Windows 10 64位环境下默认输出为amd64。 - 在当前设置了
GOARCH=386的终端执行go env GOARCH,输出结果为临时覆盖的386,属于非默认值,因此触发交叉编译产物的目录规则。
内容的提问来源于stack exchange,提问作者Paul Côté
相关产品推荐
相关产品推荐

