Сборка и установка программ Go

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

В Go процесс перевода исходного кода в двоичный исполняемый файл называется сборкой. В готовый исполняемый файл входит не только ваше приложение, но и весь вспомогательный код, необходимый для выполнения двоичного файла на целевой платформе. То есть для запуска в новой системе двоичный файл Go не требует системных зависимостей, в отличие от других языков, таких как Ruby, Python или Node.js. Помещая такие файлы в исполняемый путь системы, вы можете запустить программу из любой точки вашей системы. Это называется установкой программы.

В этом мануале вы научитесь использовать набор инструментов Go для запуска, сборки и установки простой программы «Hello, World!». Этот простой пример поможет вам эффективно использовать, распространять и развертывать ваши будущие приложения.

Требования

Чтобы выполнить этот мануал, вам понадобится среда разработки. Создать такую среду вам помогут наши мануалы:

Создание и запуск тестовой программы Go

Сначала создайте тестовое приложение, на котором вы сможете потренироваться работать с набором инструментов Go. Для этого мы создадим простую классическую программу «Hello, World!».

Читайте также: Написание простой программы Go

Создайте каталог greeter в каталоге src:

mkdir greeter

Затем перейдите в новый каталог и создайте файл main.go в любом текстовом редакторе:

cd greeter
nano main.go

Вставьте в файл следующие строки:

package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}

При запуске эта программа выведет фразу Hello, World! на консоль и затем успешно завершит работу.

Сохраните файл и выйдите из него.

Чтобы протестировать программу, используйте команду go run:

go run main.go

Вы получите следующий вывод:

Hello, World!

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

Сборка бинарных файлов Go с помощью go build

Используя команду go build, вы можете сгенерировать исполняемый двоичный файл нашего тестового приложения Go, что позволит вам распространять и развертывать программу.

Попробуйте собрать main.go. В своем каталоге greeter выполните следующую команду:

go build

Если вы не предоставите этой команде аргумент, go build автоматически скомпилирует программу main.go в текущем каталоге. Команда включит все файлы *.go в каталоге. Она также создаст весь вспомогательный код, необходимый для выполнения двоичного файла на любом компьютере с такой же архитектурой системы (независимо от того, имеет ли эта система исходные файлы .go и установлен ли в ней Go).

В этом случае вы собрали приложение greeter в исполняемый файл, который был добавлен в текущий каталог. Чтобы проверить это, можно выполнить команду ls:

ls

Если вы работаете в macOS или Linux, вы найдете новый исполняемый файл, имя которого будет совпадать с именем каталога, в котором вы собрали свою программу:

greeter  main.go

Примечание: В Windows файл будет называться greeter.exe.

По умолчанию go build генерирует исполняемый файл для текущей платформы и архитектуры. Например, если исполняемый файл собирается в системе linux/386, он будет совместим с любой другой системой linux/386, даже если в ней не установлен Go. Go поддерживает сборку для других платформ и архитектур.

Читайте также: Сборка приложений Go для разных операционных систем и архитектур

Теперь, когда вы собрали свой исполняемый файл, запустите его, чтобы убедиться, что он собран правильно. В macOS или Linux запустите следующую команду:

./greeter

В Windows запустите:

greeter.exe

Вывод двоичного файла совпадает с выводом, который вы получили при запуске программы с помощью go run:

Hello, World!

Вы создали один исполняемый двоичный файл, который содержит не только вашу программу, но и весь системный код, необходимый для его запуска. Теперь вы можете распространить эту программу на новые системы или развернуть ее на сервере, зная, что файл всегда будет запускать одну и ту же программу.

В следующем разделе мы объясним, как выбрать имя двоичному файлу и как его изменить, чтобы лучше контролировать процесс сборки программы.

Переименование бинарного файла

Теперь, когда вы знаете, как сгенерировать исполняемый файл, вам нужно научиться определять, как Go выбирает имя для двоичного файла, и настроить это имя для вашего проекта.

Когда вы запускаете go build, по умолчанию Go автоматически выбирает имя сгенерированного исполняемого файла. Это делается одним из двух способов: если вы используете модули Go, то Go будет использовать последнюю часть имени вашего модуля; в противном случае Go будет использовать имя текущего каталога. Последний метод использовался в предыдущем разделе, когда мы создали каталог greeter, перешли в него, а затем запустили go build.

Давайте подробнее рассмотрим первый метод – работу с модулями. Если бы в вашем проекте был файл go.mod с объявлением модуля, например:

module github.com/8host/blog

то по умолчанию вашему файлу было бы присвоено имя blog.

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

Давайте посмотрим, как это работает. Измените имя исполняемого файла, созданного вами в предыдущем разделе, на hello и поместите его в подкаталог bin. Вам не нужно создавать его, Go сделает это самостоятельно в процессе сборки.

Запустите следующую команду go build с флагом -o:

go build -o bin/hello

Благодаря флагу –о вы получите новый исполняемый файл по имени hello в подпапке bin.

Чтобы проверить новый исполняемый файл, перейдите в новый каталог и запустите файл:

cd bin
./hello

Вы получите такой результат:

Hello, World!

Теперь вы можете настроить имя вашего исполняемого файла в соответствии с потребностями вашего проекта,

Команда go build позволяет запускать бинарный файл только из текущего каталога. Чтобы запускать только что созданные исполняемые файлы из любой точки системы, вы можете установить их с помощью go install.

Установка программы Go с помощью go install

Вы уже знаете, как генерировать исполняемые файлы из исходных файлов .go. Эти исполняемые файлы удобно распространять, развертывать и тестировать, но их нельзя запустить вне их исходных каталогов. Это неудобно, особенно если вы хотите активно использовать свою программу: например, если вы разработали инструмент командной строки, чтобы упростить рабочий процесс в вашей системе. Чтобы работать с программами было проще, вы можете установить их и получать к ним доступ из любой точки системы.

Попробуйте использовать команду go install для установки нашего тестового приложения.

Команда go install ведет себя почти так же, как go build, но она не оставляет исполняемый файл в текущем каталоге или в каталоге, указанном флагом -o, она помещает исполняемый файл в каталог $GOPATH/bin.

Чтобы узнать, где находится каталог $GOPATH, выполните следующую команду:

go env GOPATH

Ваш вывод может отличаться, но по умолчанию это каталог go в вашем каталоге $HOME:

$HOME/go

Поскольку go install поместит сгенерированные исполняемые файлы в подкаталог $GOPATH по имени bin, этот каталог необходимо добавить в переменную среды $PATH. Сделать это вам помогут мануалы, перечисленные в разделе «Требования». Установив каталог $GOPATH/bin, вернитесь в каталог greeter:

cd ..

Теперь запустите команду установки:

go install

Она соберет двоичный файл и поместит его в $GOPATH/bin. Чтобы убедиться, что все прошло успешно, запустите:

ls $GOPATH/bin

Эта команда перечислит содержимое $GOPATH/bin:

greeter

Примечание: Команда go install не поддерживает флаг -o, поэтому она будет использовать для исполняемого файла одно из имен по умолчанию.

Установив бинарный файл, проверьте, работает ли программа вне ее исходного каталога. Вернитесь в свой домашний каталог:

cd $HOME

Используйте следующую команду, чтобы запустить программу:

greeter

Вы получите такой вывод:

Hello, World!

Теперь вы можете устанавливать написанные вами программы в свою систему, что позволяет вам использовать их из любой точки системы, когда вам это нужно.

Заключение

Теперь вы знаете, что набор инструментов Go позволяет легко создавать исполняемые файлы из исходного кода. Эти файлы можно распространять для запуска в других системах, даже в тех, которые не имеют инструментов и сред Go. Вы также научились использовать команду go install для автоматической сборки и установки программ в виде исполняемых файлов в $PATH. Команды go build и go install позволяют вам делиться своими файлами и использовать свое приложение по своему желанию.

Читайте также:

Tags: ,