Найти тему
Разработчик Разумов

Как собрать Go-приложение под Apple Silicon (M1) если у тебя нет макбука, а Apple ушёл из России

Photo by Maria Teneva on Unsplash https://unsplash.com/photos/vf4O1OwtPnk
Photo by Maria Teneva on Unsplash https://unsplash.com/photos/vf4O1OwtPnk

Go (иногда его ещё называют Golang) — статически типизированный компилируемый язык программирования, созданный в недрах компании Google. Помимо всяких крутых штук, у него есть ещё одна — это возможность кросс-компилляции под другие операционные системы и архитектуры. Другими словами, разработчик на своём компьютере под управлением, например, Linux может собрать программу, которую можно запустить на Windows или macOS, или любой другой операционке, которую поддерживает компилятор Go.

Прочитав это короткое руководство, вы узнаете, как написать простую программу на Go и собрать её под три операционные сисемы: Linux, Windows и macOS на M1 (Apple Silicon).

Начнём мы с написания непосредственно кода программы:

Go Playground - The Go Programming Language

Если мы соберём (при помощи команды go build hello.go) и запустим (./hello) эту программу, то она выведет на экран

Hello world from linux/amd64

или

Hello world from windows/amd64

или

Hello world from darwin/arm64

Всё зависит от той операционной системы, на которой сы эту программу компиллируем. Но, как я упоминал ранее, существует возможность собирать программы на Go под другие операционные системы и архитектуры, отличные от той, на которой производится сборка. С современными инструментами для языка Go — это вполне себе простая задача. Всё, что нам надо сделать — это объявить две переменные окружения — GOOS и GOARCH — и всё, мы можем собирать бинарники под разные операционки и архитектуры процессора.

Для начала давайте соберём нашу программу под Microsoft Windows:

GOOS=windows GOARCH=amd64 go build hello.go

Если посмотреть содержимое текущей директории, то можно увидеть, что в результате выполнения предыдущей команды, там появился новый двоичный файл hello.exe:

$ ls
hello.exe hello.go

Давайте более подробно узнаем тип файла hello.exe при помощи команды file:

$ file hello.exe
hello.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows

Теперь давайте соберём приложение под старый (32-битный) Linux:

GOOS=linux GOARCH=386 go build -o hello-linux-386 hello.go

Должен появиться новый файл (hello-linux-386):

$ ls
hello.exe hello.go hello-linux-386

И он должен быть 32-битным исполняемым файлом:

$ file hello-linux-386
hello-linux-386: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, ..., not stripped

Ну и наконец, давайте соберём эту же программу под новый процессор от Apple:

GOOS=darwin GOARCH=arm64 go build -o hello-macos-arm64 hello.go

После выполнения сборки, в текущей директории должен появиться третий исполняемый файл:

$ ls
hello.exe hello.go hello-linux-386 hello-macos-arm64

и его тип:

$ file hello-macos-arm64
hello-macos-arm64: Mach-O 64-bit arm64 executable, flags:<|DYLDLINK|PIE>

Вот и всё! Вот так легко можно собирать приложения написанные на языке Go под разные операционные системы и архитектуры процессоров.

#go #golang #cross-compile #apple #m1 #apple silicon #эппл #язык программирования #программирование для начинающих #программирование