问题
The closest I can get is runtime.GOARCH
, but that might also give arm
, which could be either 32 or 64 bit.
I only care how this program was built, not whether the OS also supports 64-bit executables. e.g. for ARM mode on an AArch64 CPU or 32-bit compat mode on an x86-64 CPU, I still want 32 because that's the mode this program is running in.
Related: Detect OS x86 or x64, when compiled as x86 in GO is about detecting what the OS supports, e.g. for maybe running a differently-compiled executable.
回答1:
Use GOARCH for arm: arm (ARM) and arm64 (AArch64),
Optional environment variables
$GOOS and $GOARCH
The name of the target operating system and compilation architecture. These default to the values of $GOHOSTOS and $GOHOSTARCH respectively (described below).
Choices for $GOOS are
$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
回答2:
const is64Bit = uint64(^uintptr(0)) == ^uint64(0)
This works because if uintptr
is 32 bits, ^uintptr(0)
will be 0xffffffff
rather than 0xffffffffffffffff
.
^uint64(0)
will always be 0xffffffffffffffff
regardless of 32 or 64 bit architectures.
来源:https://stackoverflow.com/questions/36024542/how-do-i-determine-whether-the-program-was-built-as-32-bit-or-64-bit-in-go