如何确定程序是在 Go 中构建为 32 位还是 64 位?

EMB*_*LEM 2 go 32bit-64bit

我能得到的最接近的是runtime.GOARCH,但这也可能给出arm,它可以是 32 位或 64 位。


我只关心这个程序是如何构建的,而不关心操作系统是否也支持 64 位可执行文件。例如,对于 AArch64 CPU 上的 ARM 模式或 x86-64 CPU 上的 32 位兼容模式,我仍然想要 32,因为这是该程序运行的模式。

相关:检测操作系统 x86 或 x64,当在 GO 中编译为 x86 时,是关于检测操作系统支持的内容,例如可能运行不同编译的可执行文件。

pet*_*rSO 5

将 GOARCH 用于 arm:arm (ARM) 和 arm64 (AArch64),

可选的环境变量

$GOOS 和 $GOARCH

目标操作系统和编译架构的名称。这些分别默认为 $GOHOSTOS 和 $GOHOSTARCH 的值(如下所述)。

$GOOS 的选择是

$GOOS     $GOARCH
darwin    386
darwin    amd64
darwin    arm
darwin    arm64
dragonfly     amd64
freebsd   386
freebsd   amd64
freebsd   arm
linux     386
linux     amd64
linux     arm
linux     arm64
linux     ppc64
linux     ppc64le
linux     mips64
linux     mips64le
netbsd    386
netbsd    amd64
netbsd    arm
openbsd   386
openbsd   amd64
openbsd   arm
plan9     386
plan9     amd64
solaris   amd64
windows   386
windows   amd64
Run Code Online (Sandbox Code Playgroud)

  • IIUC,`runtime.GOARCH` 将返回正在执行的构建*程序* 的架构。由于某些架构,即 Intel/AMD 的 64 位 ISA,允许在 64 位内核上运行 32 位程序,因此如果 OP 真的想知道当前执行其 Go 程序的操作系统的体系结构,计算这个的方法out 应该是不同的(而且,我担心,特定于平台)。 (2认同)