До настоящего момента в нашей серии статей о программировании на языке Go вы использовали команду go run
для автоматической компиляции исходного кода и запуска получаемого исполняемого файла. Хотя эта команда полезна при тестировании кода в командной строке, распределении или развертывании, ваше приложение требует, чтобы вы выполняли сборку кода в распределяемый бинарный исполняемый файл или отдельный файл, содержащий машинный байт-код, который может запускать ваше приложение. Для этого вы можете использовать цепь инструментов Go для сборки и установки вашей программы.
В Go процесс перевода исходного кода в бинарный исполняемый файл называется сборкой. После получения исполняемого файла он будет содержать не только ваше приложение, но и вспомогательный код, необходимый для выполнения бинарного файла в целевой платформе. Это означает, что бинарному файлу Go не требуются зависимости, например инструменты Go, для запуска в новой системе, в отличие от других языков, таких как Ruby, Python или Node.js. Размещение этих исполняемых файлов в путь исполняемого файла в вашей системе позволит запускать программу из любого места в вашей системе. Этот процесс называется установкой программы в вашей системе.
В этом обучающем руководстве вы будете использовать цепь инструментов Go для запуска, сборки и установки примера программы Hello, World!
, позволяющей использовать, распространять и эффективно развертывать будущие приложения.
Для выполнения примера из этой статьи вам потребуется следующее:
Сначала создайте приложение для использования в качестве примера для демонстрации цепи инструментов 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
Вывод должен выглядеть следующим образом:
OutputHello, World!
Как было упомянуто выше, команда go run
выполняет сборку вашего исходного файла в исполняемый бинарный файл, а затем запускает скомпилированную программу. Однако в этом руководстве мы выполним сборку таким образом, чтобы вы смогли предоставить общий доступ к вашему файлу и распространять его при желании. Чтобы сделать это, мы будем использовать команду go build
в следующем шаге.
go build
Используя go build
, вы можете сгенерировать исполняемый бинарный файл для нашего примера приложения Go, позволяющего распределять и развертывать программу, где захотите.
Попробуйте сделать это с main.go
. В директории greeter
запустите следующую команду:
- go build
Если вы не предоставите аргумент этой команде, go build
будет автоматически компилировать программу main.go
в текущем каталоге. Команда будет использовать все файлы *.go
в директории. Также она выполнит сборку всего вспомогательного кода, необходимого для исполнения бинарного файла на любом компьютере с той же системной архитектурой, независимо от того, есть ли в системе исходные файлы .go
или даже установка Go.
В данном случае вы создали приложение greeter
в исполняемом файле, добавленном в текущую директорию. Проверьте это, запустив команду ls
:
- ls
Если вы используете macOS или Linux, то найдете новый исполняемый файл, который назван по директории, где вы выполнили сборку вашей программы:
Outputgreeter main.go
Примечание. В Windows ваш исполняемый файл будет называться greeter.exe
.
По умолчанию go build
будет генерировать исполняемый файл для текущей платформы и архитектуры. Например, при сборке в системе linux/386
исполняемый файл будет совместимым с любой другой системой linux/386
, даже если там не установлен Go. Go поддерживает сборку для других платформ и архитектур, о чем вы можете узнать подробнее из нашей статьи Сборка приложений Go для разных операционных систем и архитектур.
Теперь, когда вы создали исполняемый файл, запустите его, чтобы убедиться, что бинарный файл сформирован корректно. В macOS или Linux запустите следующую команду:
- ./greeter
В Windows запустите следующую команду:
- greeter.exe
Вывод бинарного файла будет соответствовать выводу, когда вы запустили программу с командой go run
:
OutputHello, World!
Теперь вы создали один исполняемый бинарный файл, который содержит не только вашу программу, но и весь системный код, необходимый для запуска этого бинарного файла. Теперь вы можете распространить данную программу на новые системы или развернуть ее на сервере, зная, что файл всегда будет запускать ту же программу.
В следующем разделе настоящего руководства вы узнаете, как присваивается имя бинарного файла и как вы можете его изменить, чтобы лучше контролировать процесс сборки вашей программы.
Теперь, когда вы знаете, как сгенерировать исполняемый файл, следующим шагом будет определение того, как Go выбирает имя бинарного файла и как можно задать собственное имя для вашего проекта.
При запуске go build
по умолчанию Go будет выполнять автоматический выбор имени сгенерированного исполняемого файла. Go делает это двумя способами: если вы используете модули Go, то Go будет использовать последнюю часть имени модуля, в противном случае Go использует имя текущей директории. Этот метод использовался в последнем разделе, когда вы создали директорию greeter
, перешли в нее и запустили команду go build
.
Давайте более внимательно изучим метод с использованием модуля. Если у вас есть файл go.mod
в проекте с объявлением module
, например, как показано здесь:
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
Результат будет выглядеть следующим образом:
OutputHello, World!
Теперь вы можете настроить имя исполняемого файла согласно требованиям вашего проекта, завершив изучение сборки бинарных файлов в Go. Но при использовании команды go build
вы все равно ограничены требованием запуска вашего бинарного файла из текущей директории. Чтобы использовать вновь собранные исполняемые файлы из любого места в системе, вы можете установить их с помощью команды go install
.
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
:
Outputgreeter
Примечание. Команда go install
не поддерживает флаг -o
, поэтому она использует одно из имен по умолчанию, описанных ранее, для имени исполняемого файла.
После установки бинарного файла, выполните тест, чтобы убедиться, что программа запускается вне директории источника. Перейдите обратно в домашнюю директорию:
- cd $HOME
Используйте следующую команду для запуска программы:
- greeter
В результате вы получите следующее:
OutputHello, World!
Теперь вы можете брать написанные вами программы и устанавливать их в системе, что позволяет вам использовать их из любого места, когда вам потребуется.
В этом обучающем руководстве вы продемонстрировали, как цепь инструментов Go облегчает сборку исполняемых бинарных файлов из исходного кода. Эти бинарные файлы можно распределять для запуска в других системах, даже там, где нет инструментов и среды Go. Также вы использовали команду go install
для автоматической сборки и установки наших программ в качестве исполняемых файлов в $PATH
системы. С помощью go build
и go install
у вас есть возможность предоставлять общий доступ к вашему приложению и использовать его по вашему желанию.
Теперь, когда вы получили базовое представление о go build
, вы можете изучить возможность создания модульного исходного кода с помощью руководства по настройке бинарных файлов Go с помощью тегов сборки или узнать, как выполнять сборку для разных платформ с помощью руководства по сборке приложений Go для разных операционных систем и архитектур. Если вы хотите узнать больше о языке программирования Go в целом, ознакомьтесь с нашей серией статей о программировании на языке Go.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!