With the release of Go v1.5, it is possible to cross compile to various targets, such as Windows, Mac, Linux, Solaris, and Android. Please check the following table for a full list at Go version 1.19.3.

Each entry represents a GOOS and GOARCH environment variable combination. The first one for example, aix/ppc64, would be defined as GOOS=aix GOARCH=ppc64 before the actual compile command.

> go tool dist list | column -c 35 | column -t
aix/ppc64        linux/mips64le
android/386      linux/mipsle
android/amd64    linux/ppc64
android/arm      linux/ppc64le
android/arm64    linux/riscv64
darwin/amd64     linux/s390x
darwin/arm64     netbsd/386
dragonfly/amd64  netbsd/amd64
freebsd/386      netbsd/arm
freebsd/amd64    netbsd/arm64
freebsd/arm      openbsd/386
freebsd/arm64    openbsd/amd64
illumos/amd64    openbsd/arm
ios/amd64        openbsd/arm64
ios/arm64        openbsd/mips64
js/wasm          plan9/386
linux/386        plan9/amd64
linux/amd64      plan9/arm
linux/arm        solaris/amd64
linux/arm64      windows/386
linux/loong64    windows/amd64
linux/mips       windows/arm
linux/mips64     windows/arm64

Cross-compile examples

Windows

# 32 bit
GOOS=windows GOARCH=386 go build

# 64 bit
GOOS=windows GOARCH=amd64 go build

# arm
GOOS=windows GOARCH=arm go build

# arm 64 bit
GOOS=windows GOARCH=arm64 go build

Mac

# 64 bit
GOOS=darwin GOARCH=amd64 go build

# arm 64 bit
GOOS=darwin GOARCH=arm64 go build

Linux

# 32 bit
GOOS=linux GOARCH=386 go build

# 64 bit
GOOS=linux GOARCH=amd64 go build

# arm
GOOS=linux GOARCH=arm go build

# arm 64 bit
GOOS=linux GOARCH=arm64 go build

Cross-compile with Cgo

Some dependencies, such as SQLite, require Cgo instead of just pure Go to compile.

Mac

# 64 bit
GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go build

# arm 64 bit
GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 go build

Windows

At first, make sure to have Windows compiler setup, such as MinGW.

brew install mingw-w64

Then compile:

Windows

# 32 bit
GOOS=windows GOARCH=386 CGO_ENABLED=1 CC="i686-w64-mingw32-gcc" go build

# 64 bit
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC="x86_64-w64-mingw32-gcc" go build

For more information regarding Cgo, please follow up here .