Search code examples
go32bit-64bit

How do I determine whether the program was built as 32 bit or 64 bit in Go?


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.


Solution

  • 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