Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Что такое GOPATH

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
25 марта 2022 г.
728
5 минут чтения
Средний рейтинг статьи: 1

New Documentation

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

Что Такое Gopath (1)

В то же время 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.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону