Tutorial

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

Go

Введение

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

В 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

После открытия файла добавьте следующий код:

src/greeter/main.go
package main

import "fmt"

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

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

Сохраните и закройте файл.

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

  • go run main.go

Вывод должен выглядеть следующим образом:

Output
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, то найдете новый исполняемый файл, который назван по директории, где вы выполнили сборку вашей программы:

Output
greeter main.go

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

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

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

  • ./greeter

В Windows запустите следующую команду:

  • greeter.exe

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

Output
Hello, World!

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

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

Изменение имени бинарного файла

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

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

Давайте более внимательно изучим метод с использованием модуля. Если у вас есть файл go.mod в проекте с объявлением module​​, например, как показано здесь:

go.mod
module github.com/sammy/shark

Тогда имя сгенерированного исполняемого файла по умолчанию будет shark>.

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

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

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

  • go build -o bin/hello

Флаг -o заставляет Go сопоставлять вывод команды с предпочитаемым вами аргументом. В данном случае результатом является новый исполняемый файл с именем hello в подпапке с именем bin.

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

  • cd bin
  • ./hello

Результат будет выглядеть следующим образом:

Output
Hello, World!

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

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

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

Чтобы понять, что мы под этим подразумеваем, вы будете использовать команду go install для установки примера приложения.

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

Чтобы найти местоположение вашей директории $GOPATH, запустите следующую команду:

  • go env GOPATH

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

Output
$HOME/go

Поскольку go install будет помещать сгенерированные исполняемые файлы в субдиректорию $GOPATH с именем bin, эта директория должна быть добавлена в переменную среды $PATH. Это описано в разделе Создание вашего рабочего пространства Go в предварительной статье Установка Go и настройка локальной среды программирования.

После настройки директории $GOPATH/bin вернитесь в директорию greeter:

  • cd ..

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

  • go install

В результате вы создадите бинарный файл и поместите его в $GOPATH/bin. Чтобы протестировать, запустите следующую команду:

  • ls $GOPATH/bin

В результате вы увидите список содержимого $GOPATH/bin:

Output
greeter

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

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

  • cd $HOME

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

  • greeter

В результате вы получите следующее:

Output
Hello, World!

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

Заключение

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

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

0 Comments

Creative Commons License