One place for hosting & domains

      Знакомство с 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 в $PATH мы можем вызвать программу примерно так:

      Каталог $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, однако после завершения настройки о нем можно забыть.



      Source link