Tutorial

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

Published on January 24, 2020
Русский
Знакомство с 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 для выполнения программы, нам нужно будет выполнять запуск следующим образом:

  1. $GOPATH/bin/myapp

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

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel