Знакомство с GOPATH

Введение

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

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

Настройка переменной среды $GOPATH

Переменная среды $GOPATH перечисляет места, где Go ищет рабочие пространства Go.

По умолчанию Go использует в качестве GOPATH расположение $HOME/go, где $HOME — корневой каталог учетной записи пользователя нашего компьютера. Для изменения этой настройки следует изменить переменную среды $GOPATH. Дополнительную информацию можно найти в обучающем модуле по чтению и настройке переменных среды в Linux.

Дополнительную информацию по настройке переменной $GOPATH можно найти в документации по Go.

Кроме того, из этой серии вы можете подробно узнать об установке Go и настройке среды разработки Go.

$GOPATH — это не $GOROOT

Переменная $GOROOT определяет расположение кода Go, компилятора и инструментов, а не нашего исходного кода. Переменная $GOROOT обычно имеет значение вида /usr/local/go. Переменная $GOPATH обычно имеет значение вида $HOME/go.

Хотя явно задавать переменную $GOROOT больше не нужно, она все еще упоминается в старых материалах.

Теперь поговорим о структуре рабочего пространства Go.

Анатомия рабочего пространства Go

Внутри рабочего пространства Go или GOPATH содержится три каталога: bin, pkg и src. Каждый из этих каталогов имеет особое значение для цепочки инструментов Go.

. ├── bin ├── pkg └── src   └── github.com/foo/bar     └── bar.go 

Давайте посмотрим на каждый из этих каталогов.

Каталог $GOPATH/bin — это место, где Go размещает двоичные файлы, компилируемые go install. Операционная система использует переменную среды $PATH для поиска двоичных приложений, которые могут выполняться без полного пути. Рекомендуется добавить этот каталог в глобальную переменную $PATH.

Например, если мы не добавим $GOPATH/bin в $PATH для выполнения программы, нам нужно будет выполнять запуск следующим образом:

  • $GOPATH/bin/myapp

При добавлении $GOPATH/bin в $PATH мы можем вызвать программу примерно так:

  • myapp

Каталог $GOPATH/pkg используется Go для хранения предварительно скомпилированных объектных файлов для ускорения последующей компиляции программ. Большинству разработчиков этот каталог не потребуется. Если у вас возникнут проблемы при компиляции, вы можете спокойно удалить этот каталог, и Go воссоздаст его.

В каталоге src должны находиться все наши файлы .go или исходный код. Их не следует путать с исходным кодом, который используют инструменты Go, и который находится в каталоге $GOROOT. При написании приложений, пакетов и библиотек Go мы помещаем эти файлы в каталог $GOPATH/src/path/to/code.

Что такое пакеты?

Код Go организован в виде пакетов. Пакет представляет собой все файлы в одном каталоге на диске. Один каталог может содержать только определенные файлы из этого же пакета. Пакеты хранятся вместе со всеми созданными пользователем исходными файлами Go в каталоге $GOPATH/src. Импорт разных пакетов поможет легко понять принципы обработки пакетов.

Если наш код находится в каталоге $GOPATH/src/blue/red, его имя пакета будет red.

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

import "blue/red" 

Пакеты, находящиеся в репозиториях исходного кода, таких как GitHub и BitBucket, содержат полный адрес репозитория как часть пути импорта.

Например, мы можем импортировать исходный код по адресу https://github.com/gobuffalo/buffalo, используя следующий путь импорта:

import "github.com/gobuffalo/buffalo" 

Поэтому исходный код будет располагаться в следующем каталоге на диске:

$GOPATH/src/github.com/gobuffalo/buffalo 

Заключение

В этой статье мы рассказали о GOPATH как о наборе папок, где Go ожидает видеть наш исходный код, описали эти папки и рассказали об их содержимом. Также мы показали, как можно сменить расположение по умолчанию $HOME/go на выбранное пользователем расположение посредством настройки переменной среды $GOPATH. В заключение мы показали, как Go ищет пакеты в структуре папок.

В версии Go 1.11 были введены модули Go, призванные заменить рабочие пространства Go и GOPATH. Хотя мы рекомендуем начать использовать модули, некоторые среды, в том числе среды корпоративных сетей, могут быть еще не готовы к использованию модулей.

GOPATH — один из сложных аспектов настройки Go, однако после завершения настройки о нем можно забыть.