Поиск по сайту:

Как собирать и устанавливать программы Go


Введение

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

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

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

Предпосылки

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

  • Рабочее пространство Go, созданное в соответствии с инструкциями по установке Go и настройке локальной среды программирования.

Шаг 1 — Настройка и запуск двоичного файла Go

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

Создайте каталог с именем greeter в вашем каталоге src:

  1. mkdir greeter

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

  1. cd greeter
  2. nano main.go

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

package main

import "fmt"

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

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

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

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

  1. go run main.go

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

Output
Hello, World!

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

Шаг 2 — Создание модуля Go для сборки бинарного файла Go

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

Чтобы сообщить Go, что это модуль Go, вам нужно будет создать модуль Go с помощью команды go mod:

  1. go mod init greeter

Это создаст файл go.mod, который будет содержать имя модуля и версию Go, которая использовалась для его сборки.

Output
go: creating new go.mod: module greeter go: to add module requirements and sums: go mod tidy

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

Шаг 3 — Сборка двоичных файлов Go с помощью go build

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

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

  1. go build

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

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

  1. ls

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

Output
greeter main.go go.mod

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

По умолчанию go build создает исполняемый файл для текущей статьи Создание приложений Go для разных операционных систем и архитектур.

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

  1. ./greeter

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

  1. greeter.exe

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

Output
Hello, World!

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

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

Шаг 4 — Изменение двоичного имени

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

Когда вы запускаете go build, по умолчанию Go автоматически определяет имя создаваемого исполняемого файла. Это делается с помощью модуля, который вы создали ранее. Когда была запущена команда go mod init Greeter, она создала модуль с именем «greeter», поэтому сгенерированный двоичный файл, в свою очередь, называется greeter.

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

module github.com/sammy/shark

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

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

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

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

  1. go build -o bin/hello

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

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

  1. cd bin
  2. ./hello

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

Output
Hello, World!

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

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

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

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

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

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

  1. go env GOPATH

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

Output
$HOME/go

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

Настроив каталог $GOPATH/bin, вернитесь в каталог greeter:

  1. cd ..

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

  1. go install

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

  1. ls $GOPATH/bin

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

Output
greeter

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

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

  1. cd $HOME

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

  1. greeter

Это даст следующее:

Output
Hello, World!

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

Заключение

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

Теперь, когда вы знакомы с основами go build, вы можете изучить, как создавать модульный исходный код с помощью серии How To Code in Go.