Home » Создание Go приложений для разных ОС и архитектур
Создание Go приложений для разных ОС и архитектур

Создание Go приложений для разных ОС и архитектур

Сегодня разберёмся, как собирать Go-приложения под разные операционные системы и архитектуры. Почему это важно? Потому что мир серверов и хостинга — это не только x86_64 и Linux. Встречаются ARM, Windows, FreeBSD, иногда даже Solaris (да, кто-то ещё живёт на этом динозавре). А если вы хотите автоматизировать деплой, быстро тестировать или просто не зависеть от окружения — кросс-компиляция Go становится вашим лучшим другом. В этой статье — всё, что нужно знать, чтобы собрать Go-приложение под любую платформу, не сломать себе мозг и не потерять время на бессмысленные танцы с бубном.

Как это работает: магия кросс-компиляции в Go

Go изначально проектировался как язык для серверных приложений, и его создатели (привет, Google!) позаботились о том, чтобы сборка под разные платформы была максимально painless. В отличие от C/C++, где кросс-компиляция — это отдельный квест с настройкой toolchain, в Go всё встроено в сам компилятор. Достаточно выставить две переменные окружения: GOOS (операционная система) и GOARCH (архитектура процессора). Всё, можно собирать бинарники хоть под Raspberry Pi, хоть под Windows Server, хоть под экзотический MIPS.

  • GOOS — целевая ОС (linux, windows, darwin, freebsd, openbsd, netbsd, solaris, aix, js, android и др.)
  • GOARCH — архитектура (amd64, 386, arm, arm64, mips, mipsle, ppc64, ppc64le, riscv64, s390x, wasm и др.)

Go-компилятор сам подтянет нужные runtime и стандартные библиотеки, слинкует всё статически (ещё один плюс — не надо таскать за собой кучу .so/.dll), и на выходе получится готовый бинарник, который можно запускать на целевой платформе без дополнительных зависимостей.

Как быстро и просто всё настроить: пошаговый гайд

Всё, что вам нужно — установленный Go (желательно свежий, скачать тут). Дальше — дело техники.

  1. Проверьте версию Go:
    go version
  2. Проверьте, какие платформы поддерживаются:
    go tool dist list

    Выдаст список всех поддерживаемых комбинаций GOOS/GOARCH.
  3. Соберите бинарник под нужную платформу:

    Например, для Linux/amd64:

    GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.go


    Для Windows/386:

    GOOS=windows GOARCH=386 go build -o myapp-win32.exe main.go


    Для ARM (например, Raspberry Pi):

    GOOS=linux GOARCH=arm GOARM=7 go build -o myapp-arm main.go
  4. Проверьте размер и тип файла:

    file myapp-linux-amd64



    ls -lh myapp-*

Всё! Можно копировать бинарник на сервер, VPS или даже на роутер, если тот поддерживает Linux и нужную архитектуру.

Примеры, схемы, практические советы

Давайте разберём несколько кейсов из жизни, чтобы понять, где кросс-компиляция Go реально спасает.

Кейс Проблема Решение на Go Рекомендация
Деплой на ARM-сервер (Raspberry Pi, AWS Graviton, Oracle ARM VPS) Локально только x86_64, на сервере ARM64. Docker не всегда помогает (особенно если нужен чистый бинарник). GOOS=linux GOARCH=arm64 go build Собирайте на своей машине, копируйте бинарник — никаких зависимостей, всё работает из коробки.
Автоматизация на Windows-серверах Пишете скрипты на Linux, а запускать надо на Windows (например, для обслуживания VPS на Windows Server). GOOS=windows GOARCH=amd64 go build Go отлично компилируется под Windows, даже если вы работаете на Mac или Linux.
Минималистичный мониторинг на роутере (OpenWRT, MIPS/ARM) Роутер не поддерживает Python, Perl, bash-скрипты — только бинарники. GOOS=linux GOARCH=mipsle go build Go позволяет собрать tiny-бинарник, который работает даже на старых роутерах.
CI/CD: тесты и сборка под все платформы Нужно убедиться, что приложение работает на всех поддерживаемых ОС/архитектурах. Мультибилд через matrix в GitHub Actions, GitLab CI и т.д. Go идеально интегрируется с CI/CD, сборка под десятки платформ — вопрос одной yaml-конфигурации.

Положительные и отрицательные кейсы

  • Плюсы:
    • Сборка под любую платформу без виртуалок и докеров.
    • Статическая линковка — переносимость, минимальные зависимости.
    • Простота автоматизации (скрипты, CI/CD, деплой).
    • Маленький размер бинарников (особенно если использовать go build -ldflags="-s -w" и UPX для упаковки).
  • Минусы:
    • Не все C-библиотеки поддерживаются (если используете cgo, нужна целевая toolchain).
    • Некоторые системные вызовы могут отличаться (например, работа с сетью или файловой системой на разных ОС).
    • Редкие баги при кросс-компиляции под экзотические платформы (но это скорее исключение).

Команды для сборки под разные платформы


# Linux x86_64
GOOS=linux GOARCH=amd64 go build -o app-linux-amd64 main.go

# Linux ARMv7 (Raspberry Pi 3)
GOOS=linux GOARCH=arm GOARM=7 go build -o app-linux-armv7 main.go

# Linux ARM64 (Raspberry Pi 4, AWS Graviton)
GOOS=linux GOARCH=arm64 go build -o app-linux-arm64 main.go

# Windows 64-bit
GOOS=windows GOARCH=amd64 go build -o app-win64.exe main.go

# macOS (Intel)
GOOS=darwin GOARCH=amd64 go build -o app-macos-amd64 main.go

# macOS (Apple Silicon)
GOOS=darwin GOARCH=arm64 go build -o app-macos-arm64 main.go

# FreeBSD
GOOS=freebsd GOARCH=amd64 go build -o app-freebsd main.go

# OpenWRT (MIPS little-endian)
GOOS=linux GOARCH=mipsle go build -o app-mipsle main.go

# WebAssembly (для браузера)
GOOS=js GOARCH=wasm go build -o app.wasm main.go

Полный список поддерживаемых платформ — тут.

Похожие решения, программы и утилиты

  • gox — утилита для мультиплатформенной сборки Go-приложений (одной командой собирает под все нужные платформы).
  • xgo — кросс-компиляция Go с поддержкой cgo (через docker-образы с нужными toolchain).
  • Taskfile — удобный таск-раннер для автоматизации сборки и деплоя.
  • Docker multi-arch build — если нужен контейнер, а не голый бинарник.

Статистика и сравнение с другими языками

Язык Кросс-компиляция Статическая линковка Размер бинарника Сложность настройки
Go Встроена, 2 переменные окружения Да (по умолчанию) ~2-10 МБ (можно уменьшить) Минимальная
Rust Через --target, нужны toolchain Да (но иногда нужны дополнительные флаги) ~1-5 МБ (strip, upx) Средняя
C/C++ Требуется отдельный toolchain Редко (обычно динамическая) ~100 КБ – 1 МБ (но нужны .so/.dll) Высокая
Python Нет (нужен интерпретатор) Нет ~10-50 МБ (pyinstaller) Высокая

Go — явный лидер по простоте и скорости кросс-компиляции. Rust тоже хорош, но требует больше ручной работы. C/C++ — боль и страдания, если не хотите собирать всё на целевой платформе.

Интересные факты и нестандартные способы использования

  • Go позволяет собирать бинарники для WebAssembly (GOOS=js GOARCH=wasm), что открывает путь к запуску серверных утилит прямо в браузере (например, для тестирования или демо).
  • Можно собирать tiny-бинарники для IoT-устройств, роутеров, NAS — даже если там нет gcc, python или bash.
  • Go отлично подходит для написания кроссплатформенных CLI-утилит: один исходник — десятки платформ.
  • С помощью goreleaser можно автоматизировать релизы под все платформы, включая генерацию deb/rpm/pacman-пакетов и публикацию на GitHub Releases.
  • Go можно использовать для написания скриптов-демонов, которые работают на любом сервере без установки дополнительных пакетов (идеально для VPS и выделенных серверов — VPS, dedicated).

Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?

  • Можно писать свои агенты мониторинга, резервного копирования, деплоя — и запускать их на любом сервере, не думая о зависимостях.
  • Автоматизация CI/CD: собирайте и тестируйте под все платформы, не держите отдельные build-сервера для каждой архитектуры.
  • Миграция между хостингами и ОС: неважно, где окажется ваш сервер — Go-бинарник запустится везде.
  • Минимизация attack surface: не надо ставить интерпретаторы, компиляторы, лишние пакеты — только ваш бинарник.
  • Быстрый деплой: копируйте бинарник — и всё работает. Даже если сервер только что из коробки.

Вывод — заключение и рекомендации

Кросс-компиляция в Go — это не просто удобная фича, а реальный инструмент для ускорения работы с серверами, автоматизации и деплоя. Если вы обслуживаете разные VPS, выделенные серверы, роутеры, NAS — Go позволяет писать и собирать приложения под любую платформу за минуты, а не часы. Это экономит время, нервы и ресурсы. Не бойтесь экспериментировать: пробуйте собирать под ARM, MIPS, Windows, FreeBSD — и вы удивитесь, насколько это просто.

Рекомендую использовать Go для написания любых серверных утилит, автоматизации, мониторинга, резервного копирования и даже для небольших web-сервисов, если важна скорость деплоя и переносимость. Для автоматизации сборки — смотрите в сторону goreleaser и gox. Если нужен VPS или выделенный сервер для экспериментов — VPS, dedicated — отличное место для старта.

Go — это про скорость, простоту и надёжность. Используйте его возможности на полную, и ваши серверы скажут вам спасибо.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked