Go умеет собирать бинарники для другой ОС/архитектуры — просто указываешь GOOS и GOARCH:
# Linux бинарник на macOS
GOOS=linux GOARCH=amd64 go build -o app-linux ./cmd/server
# Windows
GOOS=windows GOARCH=amd64 go build -o app.exe ./cmd/server
# ARM (Raspberry Pi, Apple M1)
GOOS=linux GOARCH=arm64 go build -o app-arm ./cmd/server
Посмотреть все доступные платформы:
go tool dist list
# linux/amd64, darwin/arm64, windows/amd64, ...
Ограничение: если используешь cgo, кросс-компиляция требует C-кросс-компилятор. Без cgo (CGO_ENABLED=0) — работает «из коробки».
CGO_ENABLED=0 GOOS=linux go build -o app ./cmd/server
Статическая линковка по умолчанию (без cgo) — бинарник не зависит от libc, работает в scratch/distroless Docker-образах.