All of the following information is based on go version go1.14.7 darwin/amd64.
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
- aix
- android
- darwin
- dragonfly
- freebsd
- hurd
- illumos
- js
- linux
- nacl
- netbsd
- openbsd
- plan9
- solaris
- windows
- zos
NOTE:
naclsupport was dropped sincego version 1.14.
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
- 386
- amd64
- amd64p32
- arm
- armbe
- arm64
- arm64be
- ppc64
- ppc64le
- mips
- mipsle
- mips64
- mips64le
- mips64p32
- mips64p32le
- ppc
- riscv
- riscv64
- s390
- s390x
- sparc
- sparc64
- wasm
NOTE: The
amd64p32GOARCH, which is related to thenaclGOOS, was dropped sincego version 1.14.
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
- 386
- amd64p32
- arm
- armbe
- mips
- mipsle
- mips64p32
- mips64p32le
- ppc
- riscv
- s390
- sparc
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
- amd64
- arm64
- arm64be
- ppc64
- ppc64le
- mips64
- mips64le
- riscv64
- s390x
- sparc64
- wasm
- aix/ppc64
- darwin/386
- darwin/amd64
- dragonfly/amd64
- freebsd/386
- freebsd/amd64
- freebsd/arm
- freebsd/arm64
- illumos/amd64
- js/wasm
- linux/386
- linux/amd64
- linux/arm
- linux/arm64
- linux/ppc64
- linux/ppc64le
- linux/mips
- linux/mipsle
- linux/mips64
- linux/mips64le
- linux/riscv64
- linux/s390x
- netbsd/386
- netbsd/amd64
- netbsd/arm
- netbsd/arm64
- openbsd/386
- openbsd/amd64
- openbsd/arm
- openbsd/arm64
- plan9/386
- plan9/amd64
- plan9/arm
- solaris/amd64
- windows/386
- windows/amd64
- windows/arm
- darwin/386
- freebsd/386
- freebsd/arm
- linux/386
- linux/arm
- linux/mips
- linux/mipsle
- netbsd/386
- netbsd/arm
- openbsd/386
- openbsd/arm
- plan9/386
- plan9/arm
- windows/386
- windows/arm
- aix/ppc64
- darwin/amd64
- dragonfly/amd64
- freebsd/amd64
- freebsd/arm64
- illumos/amd64
- js/wasm
- linux/amd64
- linux/arm64
- linux/ppc64
- linux/ppc64le
- linux/mips64
- linux/mips64le
- linux/riscv64
- linux/s390x
- netbsd/amd64
- netbsd/arm64
- openbsd/amd64
- openbsd/arm64
- plan9/amd64
- solaris/amd64
- windows/amd64
| android | darwin | js | linux | nacl | windows | ||
|---|---|---|---|---|---|---|---|
| 386 | α | O | O | O | 386 | ||
| amd64 | α | O | O | O | amd64 | ||
| amd64p32 | amd64p32 | ||||||
| arm | α | β1 | O | O | arm | ||
| armbe | armbe | ||||||
| arm64 | α | β2 | O | arm64 | |||
| arm64be | arm64be | ||||||
| ppc64 | O | ppc64 | |||||
| ppc64le | O | ppc64le | |||||
| mips | O | mips | |||||
| mipsle | O | mipsle | |||||
| mips64 | O | mips64 | |||||
| mips64le | O | mips64le | |||||
| mips64p32 | mips64p32 | ||||||
| mips64p32le | mips64p32le | ||||||
| ppc | ppc | ||||||
| riscv | riscv | ||||||
| riscv64 | O | riscv64 | |||||
| s390 | s390 | ||||||
| s390x | O | s390x | |||||
| sparc | sparc | ||||||
| sparc64 | γ | sparc64 | |||||
| wasm | O | wasm | |||||
| android | darwin | js | linux | nacl | windows | 
NOTE:
darwinis essentially the same as macOS.
NOTE:
naclsupport was dropped sincego version 1.14.
| a | d | f | h | i | n | o | p | s | z | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 386 | O | O | O | O | 386 | ||||||
| amd64 | O | O | O | O | O | O | O | amd64 | |||
| amd64p32 | amd64p32 | ||||||||||
| arm | O | O | O | O | arm | ||||||
| armbe | armbe | ||||||||||
| arm64 | O | O | O | arm64 | |||||||
| arm64be | arm64be | ||||||||||
| ppc64 | O | ppc64 | |||||||||
| ppc64le | ppc64le | ||||||||||
| mips | mips | ||||||||||
| mipsle | mipsle | ||||||||||
| mips64 | mips64 | ||||||||||
| mips64le | mips64le | ||||||||||
| mips64p32 | mips64p32 | ||||||||||
| mips64p32le | mips64p32le | ||||||||||
| ppc | ppc | ||||||||||
| riscv | riscv | ||||||||||
| riscv64 | riscv64 | ||||||||||
| s390 | s390 | ||||||||||
| s390x | s390x | ||||||||||
| sparc | sparc | ||||||||||
| sparc64 | sparc64 | ||||||||||
| wasm | wasm | ||||||||||
| a | d | f | h | i | n | o | p | s | z | 
a = aix, d = dragonfly, f = freebsd, h = hurd, i = illumos,
n = netbsd, o = openbsd, p = plan9, s = solaris, z = zos
(blank): Unsupported
O: Supported
α:
# command-line-arguments
/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: unknown option: -z
clang: error: linker command failed with exit code 1 (use -v to see invocation)
β1:
# command-line-arguments
/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: warning: ignoring file /var/folders/dd/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/T/go-link-xxxxxxxxx/go.o, building for macOS-x86_64 but attempting to link with file built for unknown-armv7
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
β2:
# command-line-arguments
/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: warning: ignoring file /var/folders/dd/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/T/go-link-xxxxxxxxx/go.o, building for macOS-x86_64 but attempting to link with file built for unknown-arm64
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
γ:
go tool compile: exit status 2
compile: unknown architecture "sparc64"
go tool compile: exit status 2
compile: unknown architecture "sparc64"
package main
func main() {}#!/bin/sh
os_archs=()
# Reference:
# https://github.com/golang/go/blob/master/src/go/build/syslist.go
for goos in aix android darwin dragonfly freebsd hurd illumos js \
            linux nacl netbsd openbsd plan9 solaris windows zos
do
    for goarch in 386 amd64 amd64p32 arm armbe arm64 arm64be ppc64 \
                  ppc64le mips mipsle mips64 mips64le mips64p32 \
                  mips64p32le ppc riscv riscv64 s390 s390x sparc sparc64 wasm
    do
        echo "--------"
        echo "${goos}/${goarch}"
        echo "--------"
        GOOS=${goos} GOARCH=${goarch} go build -o /dev/null main.go >/dev/null 2>&1
        if [ $? -eq 0 ]
        then
            os_archs+=("${goos}/${goarch}")
        fi
    done
done
echo
echo "================"
echo
for os_arch in "${os_archs[@]}"
do
    echo ${os_arch}
donepackage main
const (
	hello uint = 0xfedcba9876543210
)
func main() {}#!/bin/bash
# Reference:
# https://github.com/golang/go/blob/master/src/go/build/syslist.go
os_archs=(
    aix/ppc64
    darwin/386
    darwin/amd64
    dragonfly/amd64
    freebsd/386
    freebsd/amd64
    freebsd/arm
    freebsd/arm64
    illumos/amd64
    js/wasm
    linux/386
    linux/amd64
    linux/arm
    linux/arm64
    linux/ppc64
    linux/ppc64le
    linux/mips
    linux/mipsle
    linux/mips64
    linux/mips64le
    linux/riscv64
    linux/s390x
    netbsd/386
    netbsd/amd64
    netbsd/arm
    netbsd/arm64
    openbsd/386
    openbsd/amd64
    openbsd/arm
    openbsd/arm64
    plan9/386
    plan9/amd64
    plan9/arm
    solaris/amd64
    windows/386
    windows/amd64
    windows/arm
)
os_archs_32=()
os_archs_64=()
for os_arch in "${os_archs[@]}"
do
    goos=${os_arch%/*}
    goarch=${os_arch#*/}
    GOOS=${goos} GOARCH=${goarch} go build -o /dev/null main.go >/dev/null 2>&1
    if [ $? -eq 0 ]
    then
        os_archs_64+=(${os_arch})
    else
        os_archs_32+=(${os_arch})
    fi
done
echo "32-bit:"
for os_arch in "${os_archs_32[@]}"
do
    printf "\t%s\n" "${os_arch}"
done
echo
echo "64-bit:"
for os_arch in "${os_archs_64[@]}"
do
    printf "\t%s\n" "${os_arch}"
done
echo