Понимание ГОПАТЫ

Вступление

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

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

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

Переменная среды$GOPATH содержит список мест, в которых Go будет искать рабочие области Go.

По умолчанию Go предполагает, что нашGOPATH находится в$HOME/go, где$HOME - это корневой каталог нашей учетной записи пользователя на нашем компьютере. Мы можем изменить это, установив переменную окружения$GOPATH. Для дальнейшего изучения следуйте этому руководству наreading and setting environment variables in Linux.

Для получения дополнительной информации о настройке переменной$GOPATH см. Godocumentation.

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

$GOPATH Не является$GOROOT

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

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

Теперь давайте обсудим структуру Go Workspace.

Анатомия рабочего пространства 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 Modules призван заменить рабочие области Go иGOPATH. Хотя рекомендуется начать использовать модули, некоторые среды, например корпоративные, могут быть не готовы к использованию модулей.

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