|  |  | @@ -0,0 +1,340 @@ | 
    
    |  |  | # Go (Golang) GOOS and GOARCH | 
    
    |  |  | 
 | 
    
    |  |  | All of the following information were gathered on `go version go1.8.3 darwin/amd64`. | 
    
    |  |  | 
 | 
    
    |  |  | ## A list of valid GOOS values | 
    
    |  |  | 
 | 
    
    |  |  | (Bold = supported by `go` out of the box, ie. without the help of a C compiler, etc.) | 
    
    |  |  | 
 | 
    
    |  |  | - `android` | 
    
    |  |  | - **`darwin`** | 
    
    |  |  | - **`dragonfly`** | 
    
    |  |  | - **`freebsd`** | 
    
    |  |  | - **`linux`** | 
    
    |  |  | - **`nacl`** | 
    
    |  |  | - **`netbsd`** | 
    
    |  |  | - **`openbsd`** | 
    
    |  |  | - **`plan9`** | 
    
    |  |  | - **`solaris`** | 
    
    |  |  | - **`windows`** | 
    
    |  |  | - `zos` | 
    
    |  |  | 
 | 
    
    |  |  | ## A list of valid GOARCH values | 
    
    |  |  | 
 | 
    
    |  |  | (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` | 
    
    |  |  | - `s390` | 
    
    |  |  | - **`s390x`** | 
    
    |  |  | - `sparc` | 
    
    |  |  | - `sparc64` | 
    
    |  |  | 
 | 
    
    |  |  | ## A list of valid 32-bit GOARCH values | 
    
    |  |  | 
 | 
    
    |  |  | (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` | 
    
    |  |  | - `s390` | 
    
    |  |  | - `sparc` | 
    
    |  |  | 
 | 
    
    |  |  | ## A list of valid 64-bit GOARCH values | 
    
    |  |  | 
 | 
    
    |  |  | (Bold = supported by `go` out of the box, ie. without the help of a C compiler, etc.) | 
    
    |  |  | 
 | 
    
    |  |  | - **`amd64`** | 
    
    |  |  | - **`arm64`** | 
    
    |  |  | - `arm64be` | 
    
    |  |  | - **`ppc64`** | 
    
    |  |  | - **`ppc64le`** | 
    
    |  |  | - **`mips64`** | 
    
    |  |  | - **`mips64le`** | 
    
    |  |  | - **`s390x`** | 
    
    |  |  | - `sparc64` | 
    
    |  |  | 
 | 
    
    |  |  | ## A list of GOOS/GOARCH supported by `go` out of the box | 
    
    |  |  | 
 | 
    
    |  |  | - `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` | 
    
    |  |  | 
 | 
    
    |  |  | ## A list of 32-bit GOOS/GOARCH supported by `go` out of the box | 
    
    |  |  | 
 | 
    
    |  |  | - `darwin/386` | 
    
    |  |  | - `freebsd/386` | 
    
    |  |  | - `freebsd/arm` | 
    
    |  |  | - `linux/386` | 
    
    |  |  | - `linux/arm` | 
    
    |  |  | - `linux/mips` | 
    
    |  |  | - `linux/mipsle` | 
    
    |  |  | - `nacl/386` | 
    
    |  |  | - `nacl/amd64p32` | 
    
    |  |  | - `nacl/arm` | 
    
    |  |  | - `netbsd/386` | 
    
    |  |  | - `netbsd/arm` | 
    
    |  |  | - `openbsd/386` | 
    
    |  |  | - `openbsd/arm` | 
    
    |  |  | - `plan9/386` | 
    
    |  |  | - `plan9/arm` | 
    
    |  |  | - `windows/386` | 
    
    |  |  | 
 | 
    
    |  |  | ## A list of 64-bit GOOS/GOARCH supported by `go` out of the box | 
    
    |  |  | 
 | 
    
    |  |  | - `darwin/amd64` | 
    
    |  |  | - `dragonfly/amd64` | 
    
    |  |  | - `freebsd/amd64` | 
    
    |  |  | - `linux/amd64` | 
    
    |  |  | - `linux/arm64` | 
    
    |  |  | - `linux/ppc64` | 
    
    |  |  | - `linux/ppc64le` | 
    
    |  |  | - `linux/mips64` | 
    
    |  |  | - `linux/mips64le` | 
    
    |  |  | - `linux/s390x` | 
    
    |  |  | - `netbsd/amd64` | 
    
    |  |  | - `openbsd/amd64` | 
    
    |  |  | - `plan9/amd64` | 
    
    |  |  | - `solaris/amd64` | 
    
    |  |  | - `windows/amd64` | 
    
    |  |  | 
 | 
    
    |  |  | ## Support Grid | 
    
    |  |  | 
 | 
    
    |  |  | |                   | `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`**     |     |     |     |     |     |     |     |     |     |     |     |     | | 
    
    |  |  | 
 | 
    
    |  |  | ### Key | 
    
    |  |  | 
 | 
    
    |  |  | `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) | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | ## Source 1 | 
    
    |  |  | 
 | 
    
    |  |  | ### main.go | 
    
    |  |  | 
 | 
    
    |  |  | ```go | 
    
    |  |  | package main | 
    
    |  |  | 
 | 
    
    |  |  | func main() {} | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | ### make.sh | 
    
    |  |  | 
 | 
    
    |  |  | ```sh | 
    
    |  |  | #!/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} | 
    
    |  |  | done | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | ## Source 2 | 
    
    |  |  | 
 | 
    
    |  |  | ### main.go | 
    
    |  |  | 
 | 
    
    |  |  | ```go | 
    
    |  |  | package main | 
    
    |  |  | 
 | 
    
    |  |  | const ( | 
    
    |  |  | hello uint = 0xfedcba9876543210 | 
    
    |  |  | ) | 
    
    |  |  | 
 | 
    
    |  |  | func main() {} | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | ### make.sh | 
    
    |  |  | 
 | 
    
    |  |  | ```sh | 
    
    |  |  | #!/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 | 
    
    |  |  | ``` |