В этой статье мы рассмотрим основы функционирования и настройки переменной окружения GOPATH
. Информация пригодится начинающим разработчикам для понимания того, как организовать поиск, инсталляцию и сборку исходников. Термин GOPATH
будет использован в качестве описания самой концепции, применяемой при создании структурного размещения папок. Внутри организуется так называемый Workspace.
В то же время GOPATH
– это переменная окружения (среды) языка программирования Go, ее применение позволяет организовать поиск каталогов. Разобраться в системе необходимо, потому что GOPATH
играет роль корневой директории предоставленного пространства для разработки. Оно применяется при обработке исходников, двоичных объектов после предварительной или полной компиляции файлов, расположенных в кэше для увеличения скорости компилирования.
Принцип действия прост – при помощи переменной GOPATH
разработчик указывает части накопителя, где платформа Go найдет область, предназначенную для размещения объектов внутри рабочего пространства. При стандартных настройках он нацелен на корневую директорию активного пользовательского аккаунта $HOME - $HOME/go. Это условие одинаково для любой среды, где развернута платформа, например, облачных ресурсов провайдера timeweb.cloud.
Наиболее актуальную информации по настройке переменной среды GOPATH
можно получить из официальной документации по Go. Процедура выполняется вручную, один раз при развертывании ресурсов. Обычно такого вопроса касаются при изучении переменных сред в Linux, включая момент инсталляции среды разработки Go и ее первичной настройки. Например, важно учитывать, что GOPATH
отличается от GOROOT
, хотя их назначение сходно.
GOROOT
указывает, где размещен код самой платформы Go, компилятора и других встроенных фишек. Путь к файлам в этом случае имеет вид /usr/local/go
. В то же время GOPATH
предназначена для указания места размещения исходного кода, созданного пользователем. Поэтому файлы хранятся по другому пути $HOME/go. Первый тип переменной не требует ручной настройки, хотя часто приводится в учебных материалах.
Внутри Workspace среды разработки Go содержится 3 директории – bin
, pkg
и src
. Они же доступны и в инструменте GOPATH
. Каждая из перечисленных папок имеет особое значение в работе платформы Go. Рассмотрим подробнее их назначение, особенности.
Директория $GOPATH/bin в рабочем пространстве Go предназначена для размещения двоичных файлов, которые впоследствии будут компилироваться в готовые программы. Операционка будет использовать указанную переменную $PATH по умолчанию при поиске файлов для обработки (без указания полного пути к ним). Поэтому папку обязательно добавляют в настройки глобальной переменной $PATH, такой шаг заметно упрощает работу.
Так, если путь $GOPATH/bin заранее не внести в переменную PATH
, при запуске программ придется указывать полный путь:
$GOPATH/bin/myapp
С одной стороны, в этом нет ничего сложного. С другой – разработчикам приходится иметь дело и с чужими решениями, в которых кодеры могут упустить такую необходимость. Например, работая с преднастроенной платформой, чтобы запустить приложение Myapp будет достаточно использовать команду вида:
Myapp
Следуем далее. Директория $GOPATH/pkg предназначена для хранения объектных файлов после предварительной компиляции. Такой подход ускоряет последующую обработку готовых программ, снижает нагрузку на сервер при большом количестве параллельно запущенных процессов. Но при нынешних мощностях и мультизадачности большая часть разработчиков перестала пользоваться подобными возможностями.
Поэтому этот каталог просто удаляют, чтобы сэкономить место на дисковом пространстве. Правда, в Go заложена функция его автоматического создания, пусть и в пустом виде. Чуть другая ситуация с папкой src – в ней расположены готовые файлы с расширением .go или исходным кодом. Нужно учитывать разницу между второй категорией пользовательского кода и того, что использует сама Go (последний находится в каталоге, указанном переменной GOROOT
).
Также каталог $GOPATH/src используют для хранения так называемых пакетов. В них хранятся все файлы определенного типа вместе с созданными пользователем исходными файлами Go. В одной директории могут храниться только данные, имеющие отношение к конкретному пакету. Благодаря такому подходу организуется систематизация хранимой информации и простота ее управления – от разработки до создания резервных копий, их восстановления.
Так, если при работе над кодом был создан каталог red ($GOPATH/src/blue/red), имя пакета будет идентичным. Особенность полезна как при самостоятельной разработке одновременно нескольких проектов, так и при использовании рабочего места несколькими кодерами (каждый имеет «свои» рабочие каталоги, которые не перепутать с «чужими»). Тогда операция импортирования пакета red будет выглядеть так:
import "blue/red"
Пакеты, хранящиеся на репозиториях вроде GitHub или BitBucket, куда выкладывают исходный код, также размещают с учетом этого правила. Полный адрес для доступа к файлам обычно включен в команды в качестве пути импорта. Пример:
import "github.com/gobuffalo/buffalo"
Приведенная команда импортирует исходный код проекта Buffalo. Он предназначен для быстрого и простого создания масштабируемых приложений в Go. При копировании файлы располагаются в соответствующем каталоге на локальной машине (или на облачном хранилище, если речь идет о VDI). Пример:
$GOPATH/src/github.com/gobuffalo/buffalo
В этой статье мы вкратце рассмотрели, что такое GOPATH
и GOROOT
, где хранятся пакеты и библиотеки Go. Также показали возможность изменить значение по умолчанию для переменной $HOME/go и то, как среда разработки ищет нужные пакеты в общей структуре. Стоит учитывать, что с появления версии Go 1.11 в системе появилось понятие модулей. Они призваны заменить рабочее пространство, сформированное при помощи GOPATH
.