Как работает cross-compilation в Go?

Junior
881 просмотров
AFK Offer AI

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-образах.

Следующий вопрос

Полиморфизм в Go?