
Одна кодовая база GO, пять платформ: мое кроссплатформенное путешествие по сборке
7 августа 2025 г.Все изображения в этой статье сгенерированы автором сNightcafe Studio.
Введение
Go, часто называемый Golang, заработал свою выдающуюся репутацию благодаря комбинации элегантной простоты, необработанной производительности и мощных моделей параллелизма.
По -настоящему преобразующая, но часто заниженная особенность GO - его врожденная и надежная поддержкаМногоплатформенное программирование.
Возможность написать одну кодовую базу и составить ее для разнообразного ландшафта операционных систем и архитектур с минимальными усилиями, является сдвигом парадигмы для разработчиков.
Это руководство обеспечивает глубокое погружение в использование перекрестной разработки, покрывая настольные и мобильные цели, включая:
- Окна
- Linux
- macOS
- Android
- ios
- И еще много!
Основной принцип:GOOS
иGOARCH
В самом сердце кросс-компиляционной магии Go находятся две основные переменные среды:GOOS
иGOARCH
Полем
Эти переменные действуют как простые, но мощные директивы для компилятора GO, инструктируя его на точную операционную систему и архитектуру процессора для предполагаемого двоичного вывода.
Этот упорядоченный подход, стандартная особенность с момента GO 1.5, сделал исторически запутанный процесс удивительно простым.
GOOS
:- Эта переменная обозначает целевую операционную систему с общими значениями, такими как
linux
Вwindows
Вdarwin
(ядро macOS),android
, иios
Полем
- Эта переменная обозначает целевую операционную систему с общими значениями, такими как
GOARCH
:- Эта переменная определяет архитектуру целевого процессора, причем популярный выбор -
amd64
(для 64-битного x86),386
(для 32-битного x86),arm64
(для 64-битной руки), иarm
Полем
- Эта переменная определяет архитектуру целевого процессора, причем популярный выбор -
Чтобы обнаружить полную матрицу поддерживаемой платформы и комбинаций архитектуры для вашей конкретной установки GO, вы можете запустить простую диагностическую команду.
go tool dist list
Эта команда запрашивает набор инструментов GO и печатает исчерпывающий список каждой возможной цели, демонстрируя обширный и универсальный охват компилятора GO.
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm
windows/arm64
Это ошеломило меня в первый раз, когда я увидел это и до сих пор ошеломляет меня сегодня!
Опыт работы с инструментами и разработчиком Golang
Одной из самых знаменитых функций GO является его интегрированный и самоуверенный инструмент, который создает очень продуктивный и последовательный опыт разработчиков.
Набор инструментов включен в стандартное распределение GO, не требующее отдельной установки или сложной конфигурации.
go build
:
- Компилятор классно быстр, что приводит к быстрым итерационным циклам. По умолчанию он производит однозначные, статически связанные двоичные файлы, упрощая развертывание.
go fmt
:
- Этот инструмент автоматически форматирует код в соответствии со стандартным соглашением.
- Он эффективно заканчивает дебаты по поводу стиля кода и гарантирует, что все GO Code, независимо от автора, имеет аналогичную структуру.
go test
:
- Go имеет легкую структуру тестирования, встроенную непосредственно в набор инструментов, в комплекте с поддержкой сравнительного анализа и анализа покрытия кода, что делает тестирование первоклассного гражданина.
go mod
:
- Modern GO использует простую и эффективную систему модуля для управления зависимостями.
- А
go.mod
Файл прост для понимания и управления, избегая сложности систем сборки, таких как Maven или Gradle.
Этот сплоченный набор инструментов снижает барьер для входа и позволяет разработчикам сосредоточиться на написании кода, а не на настройке своей среды.
Компиляция для настольных платформ
Создание исполняемых файлов для традиционных настольных сред представляет наиболее прямое применение функций кросс-компиляции GO.
Процесс дает одиночные, статически связанные двоичные файлы без внешних зависимостей времени выполнения, что значительно упрощает распределение.
Компиляция для Windows от Linux/MacOS
Чтобы создать автономный исполняемый файл для платформы Windows, вам нужно только установитьGOOS
переменная средыwindows
Полем
Для современных 64-битных систем Windows:
GOOS=windows GOARCH=amd64 go build -o myapp-amd64.exe .
Для устаревших 32-битных систем Windows:
GOOS=windows GOARCH=386 go build -o myapp-386.exe .
Получение.exe
Файлы можно запускать непосредственно на любой целевой машине Windows без необходимости установить время выполнения GO, что является ключевым преимуществом для удобства пользователя.
Компиляция для Linux с других платформ
Параллельно, нацеливание на операционную систему Linux так же просто, как и настройкаGOOS
переменнаяlinux
Полем
Вы можете компилировать многочисленные архитектуры процессоров, сamd64
для серверов и настольных компьютеров иarm64
Устройства, такие как Raspberry Pi, чрезвычайно распространены.
Для 64-разрядного Linux на x86 архитектура:
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 .
Для 64-битного Linux на архитектуре ARM:
GOOS=linux GOARCH=arm64 go build -o myapp-linux-arm64 .
Эти двоичные файлы готовы к немедленному выполнению любого распределения Linux, соответствующего указанной архитектуре.
Компиляция для macOS с других платформ
Чтобы скомпилировать приложение для macOS, вы устанавливаетеGOOS
переменнаяdarwin
Полем
Платформа MacOS заметно перешла из Intel (amd64
) переработчики к индивидуальному кремнию на основе руки Apple (arm64
), и GO может нацелиться на обоих.
Для компьютеров Mac на основе Intel:
GOOS=darwin GOARCH=amd64 go build -o myapp-macos-amd64 .
Для компьютеров Mac на основе кремния на основе Apple:
GOOS=darwin GOARCH=arm64 go build -o myapp-macos-arm64 .
Создание универсального двоичного файла для macOS
Чтобы распределить одно приложение, которое накапливается как на Mac Intel, так и на Apple Silicon Mac, вы можете создать «универсальный» двоичный.
Этот процесс требует компиляции для обеих архитектурlipo
Инструмент командной строки, который является частью среды разработки Apple Xcode.
Шаг 1: Скомпилируйте для каждой отдельной архитектуры:
GOOS=darwin GOARCH=amd64 go build -o myapp-amd64 .
GOOS=darwin GOARCH=arm64 go build -o myapp-arm64 .
Шаг 2: Используйтеlipo
инструмент для создания универсального файла:
lipo -create -output myapp-universal myapp-amd64 myapp-arm64
Этот синглmyapp-universal
Исполняемый файл обеспечивает наилучшую производительность для всех современных Mac, содержащих нативный код для обеих семей процессоров.
Погружение в мобильный: перейдите на Android и iOS
Multiplatform возможностей Go простираются в мобильную сферу черезgomobile
Инструмент, специализированная часть экосистемы GO.
Важно, что,gomobile
Можно использовать для полного строительства, работающие мобильные приложения Golang с базовыми возможностями пользовательского интерфейса с использованием пакета golang.org/x/mobile/app и opengl es.
Настройкаgomobile
Сначала вы должны установитьgomobile
инструмента и запустите его одноразовую команду инициализации, чтобы настроить необходимые привязки и инструменты.
go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init
Для Android вы должны установить Android NDK (Native Development Kit).
Для iOS требуется Xcode, и сборка должна выполняться на машине macOS.
Скомпилирование библиотеки GO для Android
Чтобы собрать пакет GO в стандартный архив Android (.aar
) библиотека, вы используетеgomobile bind
командование
Эта команда осматривает ваш пакет GO и генерирует необходимый код интерфейса Java («привязка»), чтобы сделать его вызовом из Kotlin или Java.
gomobile bind -target=android -o greeter.aar .
Затем вы можете импортировать этоgreeter.aar
файл в ваш Android Studio Projectlibs
папка и добавьте ее как зависимость.
Это позволяет вам позвонить в свой Performant Go Logic непосредственно из кода приложения Android.
Скомпилирование библиотеки GO для iOS
Процесс для iOS аналогичен.
На Mac вы бежитеgomobile bind
сios
цель.
Эта команда генерируетXCFramework
, современный, универсальный формат для двоичных библиотек на платформах Apple.
gomobile bind -target=ios -o Greeter.xcframework .
Затем вы можете перетащить этоGreeter.xcframework
непосредственно в ваш проект Xcode.
Swift Code может немедленно импортировать и использовать функции из вашего пакета GO.
Go vs. Flutter/Dart для кроссплатформенного мобильного кодирования
Go и Flutter представляют фундаментально разные подходы к кроссплатформенным разработке.
Go Общая логика (и более редко, пользовательский интерфейс), в то время как Flutter делится как логикой, так и пользовательским интерфейсом.
Особенность | Голанг (с гомобиле) | Трепетать (с дротиком) |
---|---|---|
Основной вариант использования | Обмен не UI-кодом (бизнес-логика, сеть, алгоритмы) в качестве местной библиотеки. | Полное здание, автономные приложения с унифицированным пользовательским интерфейсом из одной кодовой базы. |
Стратегия пользовательского интерфейса | Ограниченные возможности пользовательского интерфейса. Полностью полагается на нативные наборы инструментов пользовательского интерфейса хост -платформы (например, Swiftui для iOS, JetPack Compose для Android). | Предоставляет свой собственный комплексный инструментарий пользовательского интерфейса. Образует каждый пиксель на экране, используя свой графический двигатель Skia, обходя нативные виджеты пользовательского интерфейса. |
Парадигма развития | Встроить иностранную библиотеку в нативное приложение. Основное приложение по -прежнему является родным. | Напишите все приложение, включая пользовательский интерфейс, в DART. Приложение - приложение Flutter. |
Производительность | Отлично подходит для необработанных вычислительных задач. Общая библиотека работает как скомпилированный нативный бинар. | Отличная производительность пользовательского интерфейса (часто 60/120 кадров в секунду). DART может быть составлен JIT для быстрой разработки и составлена AOT для быстрого выпуска. |
Когда выбрать | Когда вам нужно поделиться высокопрофессиональной, сложной логикой, стоящей за полностью нативным пользовательским интерфейсом/UX или при повторном использовании существующего кода Be Backend на мобильном телефоне. | Когда вашим приоритетом является создание приложения с последовательным, ориентированным на брендом пользовательского интерфейса на всех платформах с максимальным повторным использованием кода. |
Go vs. Kotlin Multiplatform (KMP) для кроссплатформенного мобильного кодирования
Go и Kotlin Multiplatform (KMP) являются более прямыми конкурентами, поскольку оба сосредоточены на обмене не UI Logic.
Тем не менее, следует отметить, что теперь у Голанга также есть поддержка GUI.
Основные различия заключаются в языковой интеграции и экосистеме.
Особенность | Голанг (с гомобиле) | Kotlin Multiplatform (KMP) |
---|---|---|
Основной вариант использования | Оба используются для совместного использования не UI логики между платформами путем компиляции в собственных библиотеках. | Оба используются для совместного использования не UI логики между платформами путем компиляции в собственных библиотеках. |
Языковая интеграция | Всегда иностранный язык. Общение происходит через автоматизированный мост (FFI). | Род на Android (Kotlin-to-Kotlin). Отличное взаимодействие со Swift на iOS. Больше похоже на расширение местной среды. |
Парадигма развития | Внедрение отдельной экосистемы (GO) в нативные приложения. | Расширение экосистемы Kotlin на другие платформы. Логика записана в общем основном наборе источников. |
Система сборки | Чрезвычайно простая и быстрая команда Go Build. | Полагается на Gradle, которая является мощной и глубоко интегрированной с Android Studio, но также значительно более сложным и медленным, чем инструмент Go. |
Целевая ширина | Отличная, зрелая поддержка для обширного диапазона целей ОС/архитектуры за пределами мобильных устройств (серверы, настольные компьютеры, CLI, Webassembly). | В первую очередь сосредоточен на Android и iOS, с поддержкой настольных компьютеров и веб -ассембли. Меньше акцента на целевых показателях на стороне сервера. |
Когда выбрать | Для критически важного кода, нацеливание на широкий спектр платформ или когда простота инструментального оборудования является важным приоритетом. | Для команд, вкладываемых в экосистему Котлина, особенно для обмена логикой между Android и iOS, где бесшовная языковая интеграция является ключевой. |
Но теперь, конечно, есть инструменты, которые позволяют вам создавать графические интерфейсы в Golang и для мобильных платформ.
Просто не ждите жидкого стекла!
Вы можете найти некоторые из них ниже:
Полезные библиотеки GO для пользовательских интерфейсов, дистрибуции и многого другого
В то время как стандартная библиотека GO является обширной, богатая сторонняя экосистема предоставляет мощные инструменты, которые упрощают создание пользовательских интерфейсов и распределяют кроссплатформенные приложения. Вот десять ценных библиотек, которые играют важную роль в многоплатформенной экосистеме GO.
Файн
- Комплексный и простой в использовании инструментарий для создания приложений графического пользовательского интерфейса (GUI).
- Он написан в Pure Go и использует чистый, декларативный API для создания приложений, которые работают на настольных компьютерах (Windows, MacOS, Linux) и мобильные устройства (iOS, Android).
- Он следует принципам дизайна материала, обеспечивая современный и последовательный вид на всех платформах.
- GitHub:https://github.com/fyne-io/fyne
Планы
- Инновационная структура для создания настольных приложений с использованием логики бэкэнд и современных веб -технологий (HTML, CSS, JavaScript) для пользовательского интерфейса Frontend.
- Он обеспечивает настоящую альтернативу электрону, используя нативные веб -визуализаторы вместо того, чтобы объединить полный браузер, что приводит к меньшим и более эффективным двоичным файлам.
- Позволяет легко двустороннюю связь между бэкэндом GO и Frontend JavaScript.
- GitHub:https://github.com/wailsapp/wails
Горелез
- Окончательный инструмент для автоматизации выпуска и распространения проектов GO.
- Он оптимизирует весь рабочий процесс выпуска: он кросскомпилирован для нескольких платформ, создает архивы (.zip, .tar.gz), генерирует изменение отмены из истории GIT и может автоматически создать выпуск GitHub.
- Он также может опубликовать артефакты различным менеджерам пакетов, таким как Homebrew и Scoop, а также создавать и раздвигать многоартные изображения Docker.
- GitHub:https://github.com/goreleaser/goreleaser
Кобра
- Мощная библиотека для создания современных приложений командной строки со сложной командной структурой.
- Это основа для многих популярных инструментов, таких как
kubectl
иhugo
Включение вложенных команд (например,,app server start
), флаги, и автоматическое генерация сценариев справочного текста и завершения оболочки. - Его функциональность работает одинаково на всех платформах, что делает его идеальным для кроссплатформенных инструментов CLI.
- GitHub:https://github.com/spf13/cobra
Gio
- Библиотека с непосредственным режимами сфокусирована на высокой производительности и мелкозернистого контроля над рендерингом.
- Вместо того, чтобы предоставлять предварительно построенные виджеты, GIO дает разработчикам инструменты для эффективного рисования интерфейсов.
- Это делает его отличным выбором для инструментов визуализации данных, игр и других графических приложений, которые должны быть портативными.
- GitHub:https://github.com/gioui/gio
Гадюка
- Полное решение для конфигурации для приложений GO, которое беспрепятственно работает на всех платформах.
- Он может прочитать конфигурацию из различных источников одновременно, включая файлы свойств JSON, TOML, YAML и Java.
- Он также может читать из переменных среды, флагов командной строки и хранилища удаленных ключей/значения, что делает его невероятно гибким для настройки приложений в разных средах.
- GitHub:https://github.com/spf13/viper
Нулевой
- Высокопроизводительная, структурированная библиотека лесозаготовок, которая производит журналы JSON с нулевым распределением.
- Структурированная регистрация имеет решающее значение для современных приложений, так как позволяет легко анализировать и запрашивать журналы с помощью систем управления журналами.
- Его исключительная производительность и низкие накладные расходы делают его подходящим для любого приложения, а его платформа-агрессивная природа обеспечивает последовательную регистрацию повсюду.
- GitHub:https://github.com/rs/zerolog
Горелишер/NFPM
- Простой инструмент нулевой зависимости для создания нативных программных пакетов Linux.
- Это может генерировать
.deb
В.rpm
, и.apk
(Alpine Linux) пакеты из одного файла конфигурации YAML без необходимости таких инструментов, какdpkg
илиrpmbuild
установлен. - Это идеальный компаньон для GoreLeaser для проектов, которые требуют традиционного распределения пакетов Linux.
- GitHub:https://github.com/goreleaser/nfpm
Аферо
- Система абстракции файловой системы для GO, предоставляющая интерфейс, который может быть подкреплен различными реализациями.
- Это позволяет вам писать код, который взаимодействует с файловой системой, не привязывается к файловой системе ОС хоста.
- Это неоценимо для тестирования, так как вы можете легко заменить файловую систему ОС на быструю, введущую в память файловую систему, что позволяет обеспечить надежные и независимые от платформы тесты кода, который выполняет файл ввод/вывода.
- GitHub:https://github.com/spf13/afero
Заключение
Многоплатформенные возможности GO являются свидетельством его прагматического дизайна, предлагая мощное и освежающе простое решение для построения и распространения программного обеспечения.
Его истинная сила заключается не в замене нативного развития пользовательского интерфейса, а в увеличении его.
GO позволяет разработчикам писать основную бизнес -логику, сложные алгоритмы или сетевые стеки один раз, на высокопрофессиональном и одновременном языке, а затем развернуть эту логику повсюду.
Go дает вам возможность создавать полностью нативные, платформу-идиоматические интерфейсы, обмениваясь сложным, не визуальным кодом, который их питает.
Инструмент Gomobile может даже помочь вам создать полные мобильные нативные приложения, которые имеют базовые функции пользовательского интерфейса.
GO выделяется своей беспрецедентной простотой инструмента, молниеносным компилятором и зрелой поддержкой для обширного спектра платформ за пределами только мобильных телефонов.
Овладевая инструментами межкомпиляции GO, разработчики получают мощную новую стратегию в своем арсенале, обеспечивая гибридный подход, который сочетает в себе производительность собственного кода, UX нативных интерфейсов и эффективность общего кросс-платформенного ядра.
Go - это не просто язык; Это множитель силы для действительно многоплатформенного мира.
Чего вы ждете?
Начните создавать кроссплатформенное приложение в Голанге сегодня!
Ссылки
Перейти официальную документацию: Основной источник всей информации о языке программирования GO.
https://go.dev/doc/
GO Команды документации: Официальная документация для инструментов командной строки GO, включая
go build
Полемhttps://go.dev/doc/cmd
GO модули ссылка: Официальная ссылка на понимание и использование системы управления зависимостями GO.
https://go.dev/ref/mod
gomobile
Хранилище и вики: исходный код и официальная документация дляgomobile
инструмент.https://github.com/golang/mobile
Официальная документация горерезера: Полная документация для инструмента GoreAser.
https://goreleaser.com/
Документация по разработке Fyne: Официальная документация и ссылка API для инструментария Fyne Gui.
https://developer.fyne.io/
Официальная документация плач: Официальная документация для фреймворта воплей.https://wails.io/docs/gettingstarted/installation
Разверните официальный сайт: Официальный веб -сайт для фреймворта Flutter, для сравнения.
https://flutter.dev/
Kotlin Multiplatform Официальный сайт: Официальный веб -сайт для Multiplatform Kotlin для сравнения.
https://kotlinlang.org/docs/multiplatform-get-started.html
Репозиторий библиотеки Cobra Github: Источник и документация для библиотеки COBRA CLI.
https://github.com/spf13/cobra
Випер -библиотека репозитория GitHub: Источник и документация для библиотеки конфигурации Viper.
https://github.com/spf13/viper
Android NDK Скачания: Официальная страница загрузки для набора для разработки Android, необходимого для
gomobile
Полемhttps://developer.android.com/ndk/downloadsИнструменты командной строки Apple (включая
lipo
): Информация об установке инструментов командной строки Xcode на MacOS.https://developer.apple.com/library/archive/technotes/tn2339/_index.html
Google AI Studio использовалась в обстановке и исследованиях для этой статьи.
Вы можете найти его здесь:https://aistudio.google.com
Все изображения в этой статье сгенерированы автором сNightcafe Studio.
Оригинал