All of the following information were gathered on go version go1.8.3 darwin/amd64.
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
androiddarwindragonflyfreebsdlinuxnaclnetbsdopenbsdplan9solariswindowszos
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
386amd64amd64p32armarmbearm64arm64beppc64ppc64lemipsmipslemips64mips64lemips64p32mips64p32leppcs390s390xsparcsparc64
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
386amd64p32armarmbemipsmipslemips64p32mips64p32leppcs390sparc
(Bold = supported by go out of the box, ie. without the help of a C compiler, etc.)
amd64arm64arm64beppc64ppc64lemips64mips64les390xsparc64
darwin/386darwin/amd64dragonfly/amd64freebsd/386freebsd/amd64freebsd/armlinux/386linux/amd64linux/armlinux/arm64linux/ppc64linux/ppc64lelinux/mipslinux/mipslelinux/mips64linux/mips64lelinux/s390xnacl/386nacl/amd64p32nacl/armnetbsd/386netbsd/amd64netbsd/armopenbsd/386openbsd/amd64openbsd/armplan9/386plan9/amd64plan9/armsolaris/amd64windows/386windows/amd64
darwin/386freebsd/386freebsd/armlinux/386linux/armlinux/mipslinux/mipslenacl/386nacl/amd64p32nacl/armnetbsd/386netbsd/armopenbsd/386openbsd/armplan9/386plan9/armwindows/386
darwin/amd64dragonfly/amd64freebsd/amd64linux/amd64linux/arm64linux/ppc64linux/ppc64lelinux/mips64linux/mips64lelinux/s390xnetbsd/amd64openbsd/amd64plan9/amd64solaris/amd64windows/amd64
a | 
m | 
d | 
f | 
l | 
c | 
n | 
o | 
p | 
s | 
w | 
z | 
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
386 | 
A | 
O | 
O | 
O | 
O | 
O | 
O | 
O | 
O | 
|||
amd64 | 
A | 
O | 
O | 
O | 
O | 
O | 
O | 
O | 
O | 
O | 
||
amd64p32 | 
O | 
|||||||||||
arm | 
A | 
B | 
O | 
O | 
O | 
O | 
O | 
O | 
||||
armbe | 
||||||||||||
arm64 | 
A | 
C | 
O | 
|||||||||
arm64be | 
||||||||||||
ppc64 | 
O | 
|||||||||||
ppc64le | 
O | 
|||||||||||
mips | 
O | 
|||||||||||
mipsle | 
O | 
|||||||||||
mips64 | 
O | 
|||||||||||
mips64le | 
O | 
|||||||||||
mips64p32 | 
||||||||||||
mips64p32le | 
||||||||||||
ppc | 
||||||||||||
s390 | 
||||||||||||
s390x | 
O | 
|||||||||||
sparc | 
||||||||||||
sparc64 | 
a = android, m = darwin (macos), d = dragonfly, f = freebsd,
l = linux, c = nacl, n = netbsd, o = openbsd, p = plan9,
s = solaris, w = windows, z = zos
(blank): Unsupported
O: Supported
A:
warning: unable to find runtime/cgo.a
/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)
B:
warning: unable to find runtime/cgo.a
/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, file was built for armv7 which is not the architecture being linked (x86_64): /var/folders/dd/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/T/go-link-xxxxxxxxx/go.o
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)
C:
warning: unable to find runtime/cgo.a
/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, file was built for unsupported file format ( 0xCF 0xFA 0xED 0xFE 0x0C 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 ) which is not the architecture being linked (x86_64): /var/folders/dd/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/T/go-link-xxxxxxxxx/go.o
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)
package main
func main() {}#!/bin/sh
os_archs=()
# Reference:
# https://github.com/golang/go/blob/master/src/go/build/syslist.go
for goos in android darwin dragonfly freebsd 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 s390 s390x sparc sparc64
    do
        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
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=(
    darwin/386
    darwin/amd64
    dragonfly/amd64
    freebsd/386
    freebsd/amd64
    freebsd/arm
    linux/386
    linux/amd64
    linux/arm
    linux/arm64
    linux/ppc64
    linux/ppc64le
    linux/mips
    linux/mipsle
    linux/mips64
    linux/mips64le
    linux/s390x
    nacl/386
    nacl/amd64p32
    nacl/arm
    netbsd/386
    netbsd/amd64
    netbsd/arm
    openbsd/386
    openbsd/amd64
    openbsd/arm
    plan9/386
    plan9/amd64
    plan9/arm
    solaris/amd64
    windows/386
    windows/amd64
)
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