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:
nacl
support 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
amd64p32
GOARCH, which is related to thenacl
GOOS, 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:
darwin
is essentially the same as macOS / iOS ( https://golang.org/doc/install/source ).
NOTE:
nacl
support 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}
done
package 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